跨越不同行的MySql语句

时间:2017-06-30 13:06:47

标签: php mysql

我试图查询wordpress mySQL数据库,其中与每个用户相关的值分布在不同的行中(只有上帝知道他们为什么这样做,为什么他们只是将所有用户信息放在一行上)

例如

 ID  USER_ID FIELD_ID  VALUE
 1      1       2        my name is paul smith
 2      1       3        books
 3      1       4        loggedin
 4      1       5        state=busy
 5      2       2        my name is big boy
 5      2       3        pens
 6      2       4        offline
 7      2       5        state=idle

在这里,您可以看到每行根据同一用户的FIELD_ID具有不同的含义

 FIELD_ID=2 contains the user name
 FIELD_ID=3 contains mean what they bought
 FIELD_ID=4 means logged in
 FIELD_ID=5 is busy or idle

我需要制作一个查询,它将返回所有LOGGED IN和STATE = IDLE的用户并购买BOOKS(或购买一些其他项目,如钢笔,无论他们想搜索什么)

所以我开始使用这个php语句

   $find="pens";

   $q = "SELECT * FROM table 
          WHERE FIELD_ID='4' AND VALUE='loggedin' 
            AND FIELD_ID='5' AND VALUE='idle' 
            AND USER_ID IN 
               (SELECT USER_ID FROM table WHERE FIELD_ID ='3' AND VALUE LIKE '%$find%')

但我不认为这会起作用,因为怎么可能 FIELD_ID =' 4' AND VALUE ='已登录' AND FIELD_ID =' 5' AND VALUE ='空闲'所有这些都是因为它们在不同的行上。

有人知道如何制作一个mySQL语句吗?

1 个答案:

答案 0 :(得分:0)

你可以使用自我加入

  SELECT distinct a.user_id 
  FROM table a
  inner join table b on a.user_id = b.user_id and b.field_id = 5 and b.value='idle'
  inner join table c on a.user_id = c.user_id and c.field_id = 4 and c.value = 'loggedin'
  where a.field_id=3 and a.value='BOOK'