SQL - 如果存在于另一个表

时间:2017-05-22 12:26:53

标签: php mysql sql

共有2个表:主题消息

科目表:

----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_num_rows消息中有任何消息?结果必须为2,因为主题1在messages中包含邮件,主题2在messages中有邮件,但主题3在messages中没有收到任何邮件。

类似的东西:

mysql_num_rows(mysql_query("SELECT * FROM subjects ...

4 个答案:

答案 0 :(得分:4)

您通常会为此目的使用.as-console-wrapper { max-height: 100% !important; top: 0; }in

exists

这可以很容易地修改,以使主题没有消息。

如果您在表之间定义了正确的外键关系,那么您只需计算消息中的主题:

select count(*)
from subjects s
where exists (select 1 from messages m where m.subject_id = s.id);

MySQL中的聚合非常昂贵。在某些情况下,这会表现得更好。但是,存在select count(distinct m.subject_id) from messages; 消息(subject_id)`。

答案 1 :(得分:0)

试试这个:我想我们可以使用PokemonDayCareDBEntities1

来做到这一点
db.PlayerPkmns.Find(id)

答案 2 :(得分:0)

试试这个

$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;

答案 3 :(得分:0)

如果您要在title中搜索messages,请尝试此操作。

Rextester Demo

select count(s.title) as result 
from subjects s
where exists (select 1 from messages m
                where instr(m.message,s.title)> 1
             )

说明:instr(m.message,s.title)将在title中搜索messages并返回起始位置(整数)。如果找不到,您将获得0。所以instr(m.message,s.title)> 1只适用于预期的匹配。

然后count(s.title)会给你不同的数量。