2017-10-13 46 views
-1

我有2个表格“文本”和“作者”。我想获得最新的文本(由pubDate排序)每个作者。当我尝试使用“Group By”时,它返回一个错误。使用“分组依据”与“加入”在Mysql

这里是我的表:

作者:

+----+-------+--+ 
| id | name | | 
+----+-------+--+ 
| 1 | cat | | 
| 2 | bird | | 
| 3 | dog | | 
| 4 | horse | | 
+----+-------+--+ 

文本:

+----+----------+------------------+------------+ 
| id | authorID |  title  | pubDate | 
+----+----------+------------------+------------+ 
| 1 |  1 | Life About Cat | 2017-10-13 | 
| 2 |  1 | How to be a cat? | 2017-10-12 | 
| 3 |  2 | Is flying?  | 2017-10-13 | 
| 4 |  2 | We love cats. | 2017-10-11 | 
+----+----------+------------------+------------+ 

这里是我工作的SQL查询没有 “分组依据”

SELECT texts.id AS textID, texts.title, texts.authorID 
FROM texts JOIN authors ON authors.id = texts.authorID 
WHERE authors.pin != '1' AND authors.status='1' 
ORDER BY texts.pubDate DESC LIMIT 8 

这里不起作用查询与“分组依据”

SELECT texts.id AS textID, texts.title, texts.authorID 
FROM texts GROUP BY texts.authorID JOIN authors ON authors.id = texts.authorID 
WHERE authors.pin != '1' AND authors.status='1' 
ORDER BY texts.pubDate DESC LIMIT 8 

我怎样才能从每个作者的最新文本?

+0

您是否阅读过['SELECT'语句](https://dev.mysql.com/doc/refman/5.7/en/select.html)的文档?它解释了“GROUP BY”子句的放置位置(但它并没有教你“GROUP BY”对于你当前的目标完全没有用处)。 – axiac

+0

为什么要在没有聚合函数时使用Group By子句。如果有任何错误,请使用第一个查询并向我们显示预期的和实际的结果。还张贴一些示例数据。 –

+0

'GROUP BY' **不会从表中返回行。它会生成它返回的记录。因此它不能用于*从每个作者*获取最新的文本。搜索标签为[tag:greatest-n-per-group]的类似问题 – axiac

回答

0

试试这个 - 下面的查询

SELECT A.name 
     ,T.title 
     ,MAX(pubDate) 
FROM AUTHORS A 
INNER JOIN TEXTS T ON A.ID = T.authorID 
GROUP BY A.name 
     ,T.title 
0

尝试。

select * from Authors as a 
Inner join (
select MAX(pubDate) , author_id, title from `Text` group by author_id 
) as t 
ON t.author_id = a.id