使用多个AND运算符的Php MySql语句
我正在尝试使用多个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_
$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行:列出与