Php SQL-如果存在于另一个表中
共有两个表格:主题和消息 主题表:Php SQL-如果存在于另一个表中,php,mysql,sql,Php,Mysql,Sql,共有两个表格:主题和消息 主题表: ----id---- ----title---- 1 Subject 1 2 Subject 2 3 Subject 3 消息表: ----id---- ----subject---- ----message---- 1 1 Message to Subject 1 2 1
----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
如何获取主题的mysql\u num\u行
,哪个主题在消息中有任何消息?结果必须是2,因为主题1在消息中有消息
,主题2在消息中有消息
,但主题3在消息中没有任何消息
比如:
mysql\u num\u行(mysql\u查询(“从主题中选择*。
您通常会在
中使用,或存在
用于此目的:
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中的聚合非常昂贵。在某些情况下,聚合性能会更好。但是,假设您对
消息(subject_id)有一个索引,那么exists在大多数情况下性能可能会更好。为此,您通常会在
中使用或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中的聚合非常昂贵。在某些情况下,聚合的性能会更好。但是,假设您对
消息(subject\u id)有一个索引,那么exists在大多数情况下可能会更好。试试这个:我想我们可以简单地使用内部连接来实现聚合
SELECT COUNT(mes.subject) total_msg
FROM subjects sub
INNER JOIN messages mes on mes.subject_id = sub.id
试试这个:我想我们可以简单地使用内部连接
SELECT COUNT(mes.subject) total_msg
FROM subjects sub
INNER JOIN messages mes on mes.subject_id = sub.id
试试这个
$result = $mysqli->query("SELECT messages.id, messages.message,
subjects.title,subjects.id as subjectID
FROM messages
INNER JOIN subjects
ON messages.subject=subjects.id");
$row_cnt = $result->num_rows;
echo $row_cnt;
试试这个
$result = $mysqli->query("SELECT messages.id, messages.message,
subjects.title,subjects.id as subjectID
FROM messages
INNER JOIN subjects
ON messages.subject=subjects.id");
$row_cnt = $result->num_rows;
echo $row_cnt;
如果要在消息
中搜索标题
,请尝试此操作
说明:instr(m.message,s.title)
将在messages
中搜索title
,并返回起始位置(整数)。如果未找到,您将得到0
。因此instr(m.message,s.title)>1
仅对预期匹配为真
然后,count(s.title)
将为您提供不同的计数。如果您想在消息中搜索title
,请尝试此操作
说明:instr(m.message,s.title)
将在messages
中搜索title
,并返回起始位置(整数)。如果未找到,您将得到0
。因此instr(m.message,s.title)>1
仅对预期匹配为真
然后,count(s.title)
将为您提供不同的计数。您的查询在哪里?到目前为止您尝试了什么?选择计数(不同主题)来自消息
Ithink@OtoShavadze我们可以直接从subjects
中选择吗?停止使用不推荐的mysql\u*
API。使用mysqli\u*
或PDO
查询在哪里?到目前为止您尝试了什么?选择计数(不同的主题)来自消息
Ithink@OtoShavadze我们可以直接从主题中选择吗
?停止使用不推荐的mysql\u*
API。对我来说,使用mysqli\u*
或PDO
从Oto的消息中选择计数(不同主题)
似乎比存在
选项更好…为什么选择计数(不同主题)来自消息
不起作用…出于好奇和学习。哦,谢谢你的回答,这是正确的答案,我需要直接从主题
!@PrabhatG中选择,因为我需要从主题
中选择查询,而不是从消息
中选择查询。选择计数(不同主题)对于我来说,从消息来看,
from Oto似乎比exists
选项更好……为什么会选择count(不同主题)来自消息
不起作用…出于好奇和学习。哦,谢谢你的回答,这是正确的答案,我需要直接从主题
中选择!@PrabhatG,因为我需要从主题
中选择查询,而不是从消息
中选择查询。