使用多个AND运算符的Php MySql语句

使用多个AND运算符的Php MySql语句,php,mysql,mysqli,Php,Mysql,Mysqli,我正在尝试使用多个AND运算符编写一个php mysql语句,但似乎无法使其正常工作。有没有简单的解决方法 $sql = 'SELECT user_id FROM groups WHERE group_id = 11 AND group_id = 17 AND group_id = 19 AND group_id = 20'; $res = mysqli_query($gmg_conn, $sql); 此查询必须返回上述所有组中的每个用户。例如,DB表如下所示 group_id | user_

我正在尝试使用多个AND运算符编写一个php mysql语句,但似乎无法使其正常工作。有没有简单的解决方法

$sql = 'SELECT user_id FROM groups WHERE group_id = 11 AND group_id = 17 AND group_id = 19 AND group_id = 20';
$res = mysqli_query($gmg_conn, $sql);
此查询必须返回上述所有组中的每个用户。例如,DB表如下所示

group_id | user_id  
11       | 800  
17       |  800  
19       |  800  
20       |  800
如您所见,如果我运行此查询:

$sql = 'SELECT user_id FROM groups WHERE group_id IN (11,17,19,20)';
它将返回其中一个组中的所有用户。我需要的东西,将搜索用户谁是所有4组的一部分。我的另一种方法是将每个用户逐个引入,并拉取他们的组,然后在php中执行if语句,但如果可能的话,我想为此寻找一个MySql查询

@位于评论区的Alex能够帮助我完成我所需要的

SELECT (COUNT(group_id) = 3) AS matches, user_id AS user 
FROM groups 
WHERE group_id IN (12, 18, 14) 
GROUP BY user_id HAVING matches <> 0;
选择(计数(组id)=3)作为匹配项,用户id作为用户
来自团体
其中组id位于(12、18、14)
按具有匹配项0的用户\u id分组;

您可能想要
组id所在的位置(11、17、19、20),您当前的查询在逻辑上是不可能的,因为一个字段不能同时有多个值。

您可能希望
组id位于(11、17、19、20),您当前的查询在逻辑上是不可能的,因为一个字段不能同时有多个值。

您可能希望
组id位于(11、17、19、20),您当前的查询在逻辑上是不可能的,因为一个字段不能同时有多个值。

您可能希望
组id位于(11、17、19、20),当前查询在逻辑上不可能,因为一个字段不能同时具有多个值。

使用IN运算符

$sql='从(11,17,19,20)中包含组id的组中选择用户id';
$res=mysqli\u查询($gmg\u conn$sql)

这是因为它正在查找同时设置了所有4个值的组id,因此它不会显示任何结果。

使用IN运算符

$sql='从(11,17,19,20)中包含组id的组中选择用户id';
$res=mysqli\u查询($gmg\u conn$sql)

这是因为它正在查找同时设置了所有4个值的组id,因此它不会显示任何结果。

使用IN运算符

$sql='从(11,17,19,20)中包含组id的组中选择用户id';
$res=mysqli\u查询($gmg\u conn$sql)

这是因为它正在查找同时设置了所有4个值的组id,因此它不会显示任何结果。

使用IN运算符

$sql='从(11,17,19,20)中包含组id的组中选择用户id';
$res=mysqli\u查询($gmg\u conn$sql)


这是因为它正在查找同时设置了所有4个值的组id,所以它不会显示任何结果。

有人告诉过你“and”意味着两个条件都应该匹配吗

在您的情况下,您应该使用“或”,因为如果
group\u id
为11,则不能为17,因此在任何情况下都会失败。但要重写查询,最好在

从组id位于(11、17、19、20)中的组中选择用户id


希望有帮助有人告诉过你“and”意味着两个条件都应该匹配吗

在您的情况下,您应该使用“或”,因为如果
group\u id
为11,则不能为17,因此在任何情况下都会失败。但要重写查询,最好在

从组id位于(11、17、19、20)中的组中选择用户id


希望有帮助有人告诉过你“and”意味着两个条件都应该匹配吗

在您的情况下,您应该使用“或”,因为如果
group\u id
为11,则不能为17,因此在任何情况下都会失败。但要重写查询,最好在

从组id位于(11、17、19、20)中的组中选择用户id


希望有帮助有人告诉过你“and”意味着两个条件都应该匹配吗

在您的情况下,您应该使用“或”,因为如果
group\u id
为11,则不能为17,因此在任何情况下都会失败。但要重写查询,最好在

从组id位于(11、17、19、20)中的组中选择用户id


希望帮助

当MySQL运行您的查询时,它的计算结果如下:

Table (assume only 3 records exist):
====================================
group_id 
11         <-- Contains 11 AND 17 AND 19 AND 20? FALSE
17         <-- Contains 11 AND 17 AND 19 AND 20? FALSE
19         <-- Contains 11 AND 17 AND 19 AND 20? FALSE
Table (assume only 3 records exist):
====================================
group_id 
11         <-- Contains 11 OR 17 OR 19 OR 20       ? TRUE (Or query)
17         <-- Value In collection (11, 17, 19, 20)? TRUE (In query)
19         <-- Contains 11 OR 17 OR 19 OR 20       ? TRUE (Or query)
因此,修改后的查询如下所示:

SELECT user_id FROM groups WHERE group_id IN (11,17,19,20)

在后台,IN()方法为您处理OR链接,因此我推荐第一个实现

编辑为了获取属于每个指定组的所有用户,您可以使用计数方法,然后按段在组中执行检查:

SELECT (COUNT(group_id) = 3) AS matches, user_id AS user 
FROM groups 
WHERE group_id IN (12, 18, 14) 
GROUP BY user_id HAVING matches <> 0;
让我们把它分解一下,这样你就可以理解它了

第1行:(COUNT(group_id)=3)-如果查询返回的值为3(或无论集合大小),则返回1(true)

第3行:执行前面看到的OR检查,但如果计数为3,则只返回1

第4行:仅当返回1时才列出符合条件的用户(SQL中的!=运算符)


我希望这对您有所帮助-更新:)

当MySQL运行您的查询时,它的计算结果如下:

Table (assume only 3 records exist):
====================================
group_id 
11         <-- Contains 11 AND 17 AND 19 AND 20? FALSE
17         <-- Contains 11 AND 17 AND 19 AND 20? FALSE
19         <-- Contains 11 AND 17 AND 19 AND 20? FALSE
Table (assume only 3 records exist):
====================================
group_id 
11         <-- Contains 11 OR 17 OR 19 OR 20       ? TRUE (Or query)
17         <-- Value In collection (11, 17, 19, 20)? TRUE (In query)
19         <-- Contains 11 OR 17 OR 19 OR 20       ? TRUE (Or query)
因此,修改后的查询如下所示:

SELECT user_id FROM groups WHERE group_id IN (11,17,19,20)

在后台,IN()方法为您处理OR链接,因此我推荐第一个实现

编辑为了获取属于每个指定组的所有用户,您可以使用计数方法,然后按段在组中执行检查:

SELECT (COUNT(group_id) = 3) AS matches, user_id AS user 
FROM groups 
WHERE group_id IN (12, 18, 14) 
GROUP BY user_id HAVING matches <> 0;
让我们把它分解一下,这样你就可以理解它了

第1行:(COUNT(group_id)=3)-如果查询返回的值为3(或无论集合大小),则返回1(true)

第3行:执行前面看到的OR检查,但如果计数为3,则只返回1

第4行:列出与