表匹配的PHP / SQL查询(通配符)

时间:2017-02-12 15:49:59

标签: php mysql sql match

上次你们都非常乐于助人,我们希望我们也能解决以下挑战。

我在同一个数据库中有2个表,并尝试匹配字段。这是我正在寻找的表格名称,但我无法让它工作:

我想要MATCH表“projects”和列“categorysecond”表“users_profile”和列“category”。

projects.categorysecond可能包含示例; “Roofing,Windows,Landscaping”和users_profile.category可能只有EITHER“Roofing”或“Windows”或“Landscaping”,所以如果来自users_profile.category的结果,我想从“项目”中提取结果。在projects.categorysecond中FITS

***重要 - 我没有唯一标识符来对示例ID进行内部联接。唯一的匹配应该在上面列出的表格中,如果一个人的单词(%Wildcard)适合另一个。

我的尝试样本

$sql = "SELECT DISTINCT users_profiles.username, projects.id FROM users_profiles, projects  WHERE users_profiles.category like '%' + projects.categorysecond + '%'";

这有意义吗? :)

提前谢谢。

2 个答案:

答案 0 :(得分:1)

select  distinct 
        up.username
       ,p.id 
from   users_profiles  as up
        join    projects as p
        on      concat(',',p.categorysecond,',') like concat('%,',up.category,',%')

答案 1 :(得分:0)

你的数据格式非常糟糕。您不应该在逗号分隔的字段中存储事物列表。您对此查询的麻烦只是问题的一个示例。您无法获得此类查询以利用索引或其他优化技术。

有时,我们会遇到其他人非常糟糕的设计决策。 MySQL的函数find_in_set()在这种情况下有效:

SELECT DISTINCT up.username, p.id
FROM users_profiles up JOIN
     projects p 
     ON find_in_set(up.category, p.categorysecond) > 0;

注意:如果您不需要DISTINCT,请不要加入dataRows[row] += elementString + "\n"; 。这只会导致性能下降。