我试图查询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语句来一次性完成所有这些操作,只需发送回购买笔的在线用户。
答案 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%');