MySQL正确的选择方式

时间:2012-03-01 10:26:52

标签: php mysql sql

我有一张如下表格

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 解决方案的组合,我也不会介意:)

2 个答案:

答案 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%')