2017-10-13 16 views
-1

J'ai 2 tables "Textes" et "Auteurs". Je veux obtenir le dernier texte (ordre par pubDate) chaque auteur. Lorsque j'essaie d'utiliser un "Grouper par", il renvoie une erreur.Utiliser "Grouper par" avec "Rejoindre" sur Mysql

Voici mes tableaux:

Auteurs:

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

Textes:

+----+----------+------------------+------------+ 
| 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 | 
+----+----------+------------------+------------+ 

Voici ma requête SQL travail sans "Grouper par":

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 

Et ici inopérants requête avec « Grouper par »:

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 

Comment puis-je obtenir le dernier texte de chaque auteur?

+0

Avez-vous lu la documentation de l'instruction ['SELECT'] (https://dev.mysql.com/doc/refman/5.7/fr/select.html)? Il explique où mettre la clause 'GROUP BY' (mais cela ne vous apprend pas que' GROUP BY' est complètement inutile pour votre objectif actuel). – axiac

+0

Pourquoi vous voulez utiliser la clause Group By lorsqu'il n'y a pas de fonction d'agrégation. Utilisez la première requête et montrez le résultat attendu et réel s'il y a une erreur. Publiez également des exemples de données. –

+0

'GROUP BY' ** ne renvoie pas ** les lignes des tables. Il génère les enregistrements qu'il retourne. En conséquence, il ne peut pas être utilisé pour * obtenir le dernier texte de chaque auteur *. Rechercher des questions similaires tagged [tag: most-n-per-group] – axiac

Répondre

0

Essayez ceci -

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

Essayez ci-dessous requête.

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