Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正确的选择方法_Php_Mysql_Sql - Fatal编程技术网

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


另外,我不介意是否有phpmysql解决方案的组合:)

您正面临这个问题,因为您的表是使用(反)模式设计的

更好的表格设计是有一个“位置”表格、一个“职务”表格和一个“兴趣”表格,这也可以解决您的问题

不过,您可以使用此设计,但这是一个复杂但更麻烦的问题

我需要搜索所有用户,其中有(“伦敦”)和(“会计”或“网页设计”)和(食品或葡萄酒)


您是否使用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%')