上次你们都非常乐于助人,我们希望我们也能解决以下挑战。
我在同一个数据库中有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 + '%'";
这有意义吗? :)
提前谢谢。
答案 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";
。这只会导致性能下降。