有 2 个表:subjects 和 messages。
主题表:
----id---- ----title----
1 Subject 1
2 Subject 2
3 Subject 3
消息表:
----id---- ----subject---- ----message----
1 1 Message to Subject 1
2 1 Message to Subject 1
3 2 Message to Subject 2
如何获取subjects的mysql_num_rows
,其中messages中是否有消息?结果一定是2,因为Subject 1在messages
中有消息,而Subject 2在messages
中有消息,而Subject 3在messages中没有收到任何消息
。
类似于:
mysql_num_rows(mysql_query("SELECT * FROM subjects ...
最佳答案
您通常会为此目的使用 in
或 exists
:
select count(*)
from subjects s
where exists (select 1 from messages m where m.subject_id = s.id);
这可以很容易地修改以获得没有消息的主题。
如果您在表之间定义了适当的外键关系,那么您可以只计算消息中的主题:
select count(distinct m.subject_id)
from messages;
MySQL 中的聚合非常昂贵。在某些情况下,这会表现得更好。但是,假设您在 messages(subject_id) 上有一个索引,那么 exists 在大多数情况下可能会表现得更好。
关于php - SQL - 如果存在于另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44112831/