私は、各ユーザーに関連する値が異なる行に分散しているワードプレスのmySQLデータベースを照会しようとしています(なぜ神がそれをやったのかを知っています。行)たとえば異なる行にまたがるMySqlステートメント
ここであなたは、各行が同じユーザーに対してFIELD_IDに基づいて異なる意味のn
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
Iを持って見ることができます
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
INとSTATE = IDLEをログインしBOOKSを買った(あるいは、彼らが検索したいものは何でもペンのようないくつかの他のアイテムを購入)されているすべてのユーザーを返しますONEクエリ
を作るためのEEDはので、私はこの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 =「LOGGEDIN」AND FIELD_ID =「5」AND VALUE =「アイドル」の全てです可能性があるためので、これが動作すると思いますいけません。
誰かがそれを行うために1つのmySQL文を作成する方法を知っていますか?彼らはしたくなかったので -
に参加しますダムの静的システムですが、データベース構造を常に変更することなく、プラグインが必要に応じて追加のプロパティを簡単に追加できる場所です。それは、神がすべての賢明な開発者に同意するものです。 – CBroe
問題を解決するには、ユーザーIDごとにグループ化し、WHERE句を使用して条件の1つに一致するすべてのレコードを選択します(したがって、ORではない)。そして最後にHAVINGを使用して、グループ化されたデータは、照合している基準の数と一致します。 – CBroe
はANDの代わりにORを使用し、FEILD_IDの値を探すだけでVALUEの値は必要ありません –