0

データベース内でIDを見つけようとしています。次のものを見つける必要があります。

17,
,17
,17,

17 で始まる他の ID (つまり、170、171、173 など) が見つからないようにします。現在、次の変数を設定して、mysql クエリに取り込みます。

$userid = '' . $row['userid'] . ',%';
$userid2 = '%,' . $row['userid'] . '%';
$userid3 = '' . $row['userid'] . '%';

しかし、ID 170 も引き込んでいることがわかりました。ID 170 が文字列の最後に置かれるたびに発生すると思います。あなたが提供できるどんな助けでも、私は最も感謝します. ここに私が取り組んでいるクエリがあります:

"SELECT formid, draft, activestatus 
 FROM forms
 WHERE notifyusers like '$userid' 
 AND activestatus != '3' OR notifyusers like '$userid2' AND activestatus != '3' 
 OR notifyusers like '$userid3' AND activestatus != '3'";   
4

6 に答える 6

1

あなたの notifyusers 列には、CSV データとして 1->many の関係が含まれていますか? リレーショナル データベースが本当に得意とすることを活用してみませんか? あなたが知っている、関係!formid と userid の間のリンクを格納する別のテーブルを作成します。

CREATE TABLE form_notifyuser
(
   formid INT NOT NULL,
   userid INT NOT NULL,
   PRIMARY KEY(formid, user_id),
   INDEX(user_id)
);

これで、クエリの表現と読み取りがはるかに簡単になりました。

SELECT forms.formid, forms.draft, forms.activestatus 
 FROM forms
 INNER JOIN form_notifyuser USING(formid)
 WHERE form_notifyuser.userid = 17 AND  forms.activestatus != 3;
于 2013-07-31T15:28:46.403 に答える
0

このクエリを試してください:

"SELECT formid, draft, activestatus 
 FROM forms
 WHERE concat(',',notifyusers,',') like '%,".$row['userid'].",%' 
 AND activestatus != '3'";
于 2013-07-31T17:00:33.977 に答える