Php 正确的选择方法
我有一张像下面这样的桌子Php 正确的选择方法,php,mysql,sql,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 'foo
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
我现在的问题是,我需要用人类的术语来质疑它,如下所示
我需要在select查询中以某种方式拆分表,以便像这样进行搜索
我需要搜索所有用户,其中有(“伦敦”)和(“会计”或“网页设计”)和(食品或葡萄酒)
我的问题是我无法拆分字段\u值
来分离“位置”、“职务”、“兴趣”,如果它们位于不同的字段,我会发现很容易做到,但由于它们位于同一字段,我发现很难使用AND或OR组合
如果问题难以理解,我将尝试进一步解释。
许多thnx
另外,我不介意是否有php和mysql解决方案的组合:)您正面临这个问题,因为您的表是使用(反)模式设计的 更好的表格设计是有一个“位置”表格、一个“职务”表格和一个“兴趣”表格,这也可以解决您的问题 不过,您可以使用此设计,但这是一个复杂但更麻烦的问题 我需要搜索所有用户,其中有(“伦敦”)和(“会计”或“网页设计”)和(食品或葡萄酒)
您是否使用EAV模式并希望按自定义字段进行查询?据我所知,您需要有一个users表和一个带有用户自定义字段的表,对吗?我不太了解您的数据结构。您要查找的类别(“位置”、“职务”)由
字段\u id
指示,对吗?如果是这样的话,你可以使用只选择那些类别的子查询,然后从那里继续。@t好吧,地点是伦敦曼彻斯特,职位是网页设计师会计,我不能制作不同的表格,因为这是一个开源项目,会产生更多的问题来解决这些问题。这个小问题:)你忘记了as
关键字了吗<代码>。。。与y1相同?或者这是可选的?它是可选的,但是如果您认为它更清楚,请随意添加它。您应该在user\u id
上加入,否则,查询将不会返回任何内容过去两天您在哪里lol,?我已经尝试了所有的方法,内部连接,连接,左连接,这么多的组合,我很快就可以完成了,但是这确实有效:)| |如果有人想在IN()
函数中使用比如%
的话,应该检查一下:)很多thnks的家伙,非常感激。
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")
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%')