MySQL语句分别查询每个结果

时间:2017-06-26 16:51:13

标签: mysql

我试图查询wordpress数据库,其中每个用户的每个值都存储在不同的行上。

例如

ID  USER_ID FIELD_ID  VALUE
1      1       2        my name is paul smith
2      1       3        i bought books
3      1       4        online
4      2       2        my name is big boy
5      2       3        i bought pens
6      2       4        offline

这里你可以看到而不是字段名称,它是一个FIELD_ID,所以FIELD_ID = 2表示用户名,FIELD_ID = 3表示他们购买的东西,FIELD_ID = 4表示他们是开/关线。

我需要做的是制作一个sql语句,该语句返回现在在线购买笔的用户列表。

所以我试着这样做

选择其field_id = 4且值='在线'

的所有用户
 string online= "(select * from table where FIELD_ID='4' AND VALUE='online')";

选择其field_id 3包含' pens'

的所有用户
 string pens="(select * from table where FIELD_ID='3' AND VALUE LIKE '%pens%'";

然后把它们放在一起

string query=pens + " WHERE " + online;

如果我运行" online"和"笔" sql语句本身可以工作,但是组合的"查询"不回报任何东西。

我想这可能是因为"在线"查询结果将包括一堆现在在线的用户USER_ID,但第二个查询必须对每个USER_ID运行查询并返回该值。

所以它必须知道从"在线"中选择USER_ID字段。查询然后分别查询每个USER_ID并发回组合结果。

我不知道如何制作一个SQL语句来一次性完成所有这些操作,只需发送回购买笔的在线用户。

3 个答案:

答案 0 :(得分:0)

您走在正确的轨道上,您只需要让子查询返回用户的ID,然后使用IN语句,例如伪代码:

... WHERE id IN ([subquery]) 

答案 1 :(得分:0)

使用联接

Select *
From (
    Select *
    FROM Table
    WHERE FIELD_ID='4' AND VALUE='online'
) t
WHERE t.FIELD_ID='3' AND t.VALUE LIKE '%pens%'

答案 2 :(得分:0)

您声明该表包含USER_ID。如果是这样,那么结合两个查询的方法如下:

SELECT * FROM table WHERE FIELD_ID='4' AND VALUE='online' AND USER_ID IN (SELECT USER_ID FROM table WHERE FIELD_ID='3' AND VALUE LIKE '%pens%');