2015-04-08 38 views
1

我想创建一个SQL来获取用户名为Mark,并且是具有ID 13的帖子的作者。检查行是否有特定的孩子加入

注意:我不知道有多少帖子需要检查。所以它可能需要使用PHP来生成这部分SQL查询。

如何做到这一点?

用户表:

+----+----------+ 
| id | name | 
+----+----------+ 
| 1 | Mark  | 
| 2 | John Doe | 
+----+----------+ 

帖子表

+----+-------------+-------------+ 
| id | text  | author_id | 
+----+-------------+-------------+ 
| 1 | First Post |   1 | 
| 2 | Second Post |   2 | 
| 3 | Last Post |   1 | 
+----+-------------+-------------+ 

这只是使用的样品的情况下,不是真正的数据。

注:我知道如何检查用户是否在一篇文章中是作者,但在同一行中不是多个。所以基本上,这是我需要帮助,我想它一定是left join

为了使名为Mark并检查用户的检查,如果他是笔者的文章ID 1我做了以下内容:

SELECT users.* 
FROM users 
INNER JOIN posts 
    ON users.id = posts.author_id 
WHERE 
    users.name = 'Mark' 
    && 
    posts.author_id` = 1 
+2

你正在做一个内部连接。你只能在Mark的作者那里获得'posts',这意味着'where'子句中的'posts.author_id'测试是多余的 - 它已经在'join'级别执行了。 –

+0

我明白了,这是一个不好的例子。感谢您指出:) –

回答

1

我刚刚从users选择id。如果您需要更多列,请将其添加到selectgroup by子句中。

SELECT users.id 
FROM users 
INNER JOIN posts ON users.id = posts.author_id 
WHERE users.name = 'Mark' 
AND posts.author_id in (1,3) 
GROUP BY users.id 
HAVING count(distinct posts.author_id) = 2 
1

使用子查询只找到用户既1和3:

SELECT users.* 
FROM users 
WHERE users.name = 'Mark' 
    and 2 = (select count(distinct posts.id) 
      where users.id = posts.author_id 
      and posts.id IN (1,3)) 
0

SELECT users.name,posts.posts,posts.authorid 来自用户的INNER JOIN岗位上的用户。 ID = posts.authorid其中posts.authorid = 1

+0

我想你误解了这个问题。 :) 不管怎么说,多谢拉。 –

0

您需要使用HAVING条款以达到预期的结果:

SELECT users.name 
    FROM users 
    INNER JOIN posts 
     on users.id = posts.author_id 
WHERE users.name = 'Mark' 
GROUP BY users.name 
HAVING COUNT(posts.author_id) > 1