Php 不包括mysql查询结果

Php 不包括mysql查询结果,php,mysql,sql,Php,Mysql,Sql,这是我的桌子的图像: 我想选择class_id不等于48的所有行,如下所示: SELECT * FROM `clients` WHERE `class_id` != '$class_id' AND user_id = ".$_SESSION['user_id']." 这里有一个问题,正如你所看到的,史蒂夫·普丁·罗宾逊的班级id为48,班级id为64。因为这个人已经在48类中了,所以我想从结果中排除他的名字。这样做有意义吗?在不向查询传递特定的名字姓氏和昵称的情况下,这是否可行 工作查询

这是我的桌子的图像:

我想选择class_id不等于48的所有行,如下所示:

SELECT * FROM `clients` WHERE `class_id` != '$class_id' AND user_id = ".$_SESSION['user_id']." 
这里有一个问题,正如你所看到的,史蒂夫·普丁·罗宾逊的班级id为48,班级id为64。因为这个人已经在48类中了,所以我想从结果中排除他的名字。这样做有意义吗?在不向查询传递特定的
名字
姓氏
昵称
的情况下,这是否可行

工作查询

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;
修改的查询

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;

我认为您的数据结构工作不正常。你的连接是基于他们的名字,这可能会在某个时候失败。是否每个人都没有唯一的ID?我看到一个客户id和用户id,但这并不意味着一个人的全局id

如果有两个“史蒂夫·史密斯”呢?

这个呢

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

检查以测试它。

姓氏和昵称可以互换吗?同样,正如前面所写的,您的查询可以进行SQL注入;我们建议将其重写为使用参数化查询。您所说的“可交换的用户”是什么意思?您可以在查询的末尾添加“和类”\u I'd!=48@ronanc如果我正确理解你,那就是我正在做的。此查询的结果被放入复选框表单中,然后将每个选中的名称添加到
类\u id 48
。按照现在的设置方式,我可以再次将
Steve
添加到类中,因为查询将使用
class\u id 64
提取行。这就是我想要排除的,这就是我添加昵称列以提供更多选项的原因。我真的不知道任何其他的设置方法,因为一个客户可以有多个条目,只有类id是不同的谢谢你,先生…就像一个符咒,我不得不改变一点,但它是有效的。非常感谢。在您添加的查询中,如果我想同时获得
class\u id=29
的所有行,该怎么办?我尝试了几种不同的方法,但无法使其工作。是否要排除属于类29的用户以及属于类48的用户?如果是这样,请在(29,48)No中将连接条件的最后一部分更改为
和c1.class\u id,我只希望返回user\u id=29的行。您编写的查询工作正常,但返回的行不是登录用户设置的,在本例中,您必须选择其中的
,其中c.user\u id=29,c1.class\u id为NULL