0

ここに私のテーブルの画像があります:

クライアントテーブル

次のように、class_id が 48 ではないすべての行を選択します。

SELECT * FROM `clients` WHERE `class_id` != '$class_id' AND user_id = ".$_SESSION['user_id']." 

ここに問題があります。ご覧のとおり、class_id 48 と class_id 64 を持つ Steve Puddin Robinson の行があります。この人物は既にクラス 48 にいるため、その名前も結果から除外したいと考えています。first_name last_nameそれは理にかなっており、特定のものをnicknameクエリに渡さずにこれは可能ですか

ワーキングクエリ

SELECT * 
FROM `clients` 
WHERE `user_id`= ".$_SESSION['user_id']." AND `nickname` 
NOT IN(SELECT `nickname` FROM `clients`
WHERE `class_id` = '$class_id')

変更されたクエリ

SELECT c.* FROM clients c
LEFT JOIN clients c1
ON `c1`.`first_name` = `c`.`first_name`
AND `c1`.`last_name` = `c`.`last_name`
AND `c1`.`nickname` = `c`.`nickname`
AND `c1`.`class_id` = 48
WHERE `c1`.`class_id` IS NULL;
4

2 に答える 2

0

What about this?

SELECT * FROM clients
WHERE nickname NOT IN
(SELECT nickname FROM clients
 WHERE class_id = 48)

or, if the combination of both First name, Last name and nickname is needed to identify the clients, this one:

SELECT c.* FROM clients c
LEFT JOIN clients c1
ON c1.first_name = c.first_name
AND c1.last_name = c.last_name
AND c1.nickname = c.nickname
AND c1.class_id = 48
WHERE c1.class_id IS NULL

Check SQLfidle to test it.

于 2012-11-28T21:05:54.513 に答える
0

データ構造が正しく機能していないことをお勧めします。名前に基づいて接続しているため、ある時点で失敗する可能性があります。一人一人に固有のIDはありませんか?client_id と user_id が表示されますが、これらは個人のグローバル ID を示唆していません。

「Steve Smiths」が 2 人いる場合はどうなるでしょうか。

于 2012-11-27T22:52:23.063 に答える