这是我桌子的图像:
我想选择class_id不等于48的所有行,如下所示:
SELECT * FROM `clients` WHERE `class_id` != '$class_id' AND user_id = ".$_SESSION['user_id']."
这是问题所在,你可以看到Steve Puddin Robinson有一行有class_id 48和class_id 64.由于这个人已经在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;
答案 0 :(得分:0)
我建议您的数据结构无法正常运行。你基于他们的名字建立联系,这可能会在某些时候失败。每个人没有唯一身份证吗?我看到了一个client_id和user_id,但这些并没有建议一个人的全局ID。
如果有两个“史蒂夫史密斯”怎么办?
答案 1 :(得分:0)
这个怎么样?
SELECT * FROM clients
WHERE nickname NOT IN
(SELECT nickname FROM clients
WHERE class_id = 48)
或者,如果需要名字,姓氏和昵称的组合来识别客户,那么这个:
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
选中SQLfidle进行测试。