我有一张如下表格
id field_id field_value user_id
1 4 'london' 12
2 4 'manchester' 33
3 25 'accounting' 12
4 25 'web designer' 37
5 27 'food' 12
6 27 'wine' 34
我现在的问题是,我需要按照以下方式查询它,
我需要以某种方式在选择查询上拆分表格,以便我可以这样搜索,
我需要搜索所有用户(“伦敦”)和(“会计”或“网页设计”)和(食品或葡萄酒)
我的问题是我无法将field_value
拆分为单独的“位置”,“职称”,“兴趣”,如果他们在不同的领域我会觉得很容易做到,但因为他们是相同的字段,我发现很难使用AND和OR组合,
如果问题难以理解,我会尝试进一步解释。 很多thnx
如果有 php 和 mysql 解决方案的组合,我也不会介意:)
答案 0 :(得分:2)
您遇到了问题,因为您的表格是使用EAV (Entity–attribute–value model)(反)模式设计的。
更好的表格设计是拥有表格“位置”,表格“职位名称”和表格“兴趣”。它也可以解决你的问题。
但是,你可以使用这种设计,但它更麻烦。
我需要搜索所有用户(“伦敦”)和(“会计”或“网页设计”)和(食品或葡萄酒)
SELECT y1.*
FROM yourtable y1
JOIN yourtable y2
ON y1.USER_ID = y2.USER_ID
JOIN yourtable y3
ON y2.USER_ID = y3.USER_ID
WHERE y1.field_id = 4
AND y1.field_value = "london"
AND y2.field_id = 25
AND y2.field_value IN ("accounting", "web design")
AND y3.field_id = 27
AND y3.field_value IN ("food", "wine")
答案 1 :(得分:1)
SELECT *
FROM table
WHERE user_id IN(SELECT user_id FROM table WHERE field_value LIKE '%london%')
AND user_id IN (SELECT user_id FROM table WHERE field_value LIKE '%accounting%' OR field_value LIKE '%web design%')
AND user_id IN (SELECT user_id FROM table WHERE field_value LIKE '%food%' OR field_value LIKE '%wine%')