Php 如何获取与MySQL数据库多列值匹配的值

Php 如何获取与MySQL数据库多列值匹配的值,php,mysql,Php,Mysql,我需要使用PHP和MySQL匹配MySQL表的多个相同列值。我在下面解释我的表格 数据库用户: 这里我需要select查询,条件是如果同一个book_id的状态为0,意味着如果表中有让我们说book_id=22和all status=0,那么只有它会返回值true,否则为false。我在下面写一个例子 $sql=mysqli_query($connect,"select * from db_user where status=0 and...."); if(mysqli_num_rows($sq

我需要使用PHP和MySQL匹配MySQL表的多个相同列值。我在下面解释我的表格

数据库用户:

这里我需要select查询,条件是如果同一个book_id的状态为0,意味着如果表中有让我们说book_id=22和all status=0,那么只有它会返回值true,否则为false。我在下面写一个例子

$sql=mysqli_query($connect,"select * from db_user where status=0 and....");
if(mysqli_num_rows($sql) > 0){
   $row=mysqli_fetch_array($sql);
   $data=$row['book_id'];
}else{
   return 0;
}

这里,根据示例表,只有最后一行将获取,因为对于book_id=22,存在状态=1。只有当一本书的id all status=0时,才会获取数据。

对于状态为1的id,可以使用not in

select * 
from my_table 
where book_id not in (
 select book_id 
 from my_table 
 where status = 1  )

一个选项使用聚合来检查状态值:

SELECT book_id
FROM db_user
GROUP BY book_id
HAVING SUM(CASE WHEN status <> 0 THEN 1 ELSE 0 END) = 0;

早在那天,我们就可以这样解决了。我说,如果它没有坏,就不要修理它

 SELECT DISTINCT x.*
            FROM my_table x
            LEFT 
            JOIN my_table y
              ON y.book_id = x.book_id
             AND y.status = 1
           WHERE y.id IS NULL;
很简单:

按书本id从db_用户组中选择书本id、MAXstatus和max_status


如果最大状态为0,则所有值都不大于0。

您可以使用下面的查询

select * from db_user where status=0 and book_id not in (select book_id from db_user where status = 1 );

我已经测试过了,效果很好。

再也没有人会说“老派”:-@草莓,我一听到评论就知道是你。它有你的味道。它的抛出错误1055-选择列表的表达式1不在GROUP BY子句中,并且包含未聚合的列“easyride.db_user.id”,它在功能上不依赖GROUP BY子句中的列;这与sql\u mode=only\u full\u组不兼容_by@subhra不。我的查询不会导致该错误,您正在运行其他东西,可能是对我所写内容的修改。@TimBiegeleisen:您的第二个查询正在运行,但其获取多个值意味着如果all status=0,则其获取簿\u id=22多次。这似乎是现有应答的重复。请仔细查看该查询是否不同,我在查询中添加了status=0,并检查了我的电脑是否正常工作@草莓
 SELECT DISTINCT x.*
            FROM my_table x
            LEFT 
            JOIN my_table y
              ON y.book_id = x.book_id
             AND y.status = 1
           WHERE y.id IS NULL;
select * from db_user where status=0 and book_id not in (select book_id from db_user where status = 1 );