2017-10-07 1 views
-2

Donc je veux montrer les 5 messages les plus populaires sur ma page de blog (pas de wordpress, tout html et php) en faisant une requête mysql. La popularité est le nombre de commentaires sur ce poste. Ce serait facile Si ma table de saisie de blog contenait un commentaire-count. Mais je cherche une solution sans changer à nouveau toutes mes tables mysql. Donc, Ive a 2 tables:PHP: Messages populaires via MYSQL Query

Tableau Blog
contient des colonnes: ID | Contenu | Date
Exemple Ligne: 1 | Bonjour les gars, aujourd'hui je suis allé faire du shopping | 01.01.01
Tableau Commentaires
Contient des colonnes: ID | Contenu | Date | Compte | Référence
Exemple Ligne: 2 | Entrée impressionnante! | 02.01.01 | Kim | En principe, chaque fois que quelqu'un commente une entrée, son nom de compte et son commentaire sont insérés dans le tableau Commentaires. De plus, il y a un ID d'auto-incrémentation et une référence qui contient l'ID du Blog Entrée à laquelle appartient (et il y a une date). La table Blog contient simplement ce qu'elle doit afficher (sauf son ID auto-incrémenté, qui est utilisé pour la colonne Référence dans le tableau Commentaires).
Alors, quelle requête dois-je exécuter pour obtenir le Blog-Entrys auquel le plus de commentaires se réfèrent dans le Référence-Colonne?

EDIT: J'ai essayé différentes combinaisons de sum(), count() et max() n'obtenant jamais le résultat attendu. Aurait dû écrire cela plus tôt.

+1

Il serait agréable de voir ce qu'il était que vous avez essayé afin d'avoir résolu cela vous-même, ce qui nous aurait montré que vous avez fait des recherches avant de poster la question. Lorsque vous essayez, vous apprenez également. Si quelqu'un vous donne juste une réponse/solution, tout aurait été pour rien et je dis cela pour le/votre avenir. Vous pouvez ensuite modifier votre message pour qu'il contienne des éléments susceptibles d'avoir échoué. même cela montre un effort de votre part. Rappelez-vous, nous sommes toujours heureux d'aider. –

Répondre

0

La requête suivante vous obtient tous les blogs avec les commentaires avec un plus grand nombre. Je l'ai utilisé limite pour limiter le pas d'enregistrements tiré par les cheveux

SELECT b.content, b.id AS blogid, COUNT(c.id) as commentsCount 
FROM blog b 
JOIN comments c ON c.reference = b.id 
GROUP BY b.id 
HAVING commentsCount > 0 
ORDER BY commentsCount desc 
LIMIT 5 

J'ai ajouté le commentaire à chaque ligne. S'il vous plaît vérifier

SELECT b.content, b.id AS blogid, COUNT(c.id) as commentsCount //This line you can select whatever columns you need. 
    FROM blog b 
    JOIN comments c ON c.reference = b.id //Joing comments by reference column 
    GROUP BY b.id //group the column 
    HAVING commentsCount > 0 //The blog may have or may not have comments 
    ORDER BY commentsCount desc //Used to get the highest comment count first 
    LIMIT 5 //get only 5 records if you want 10 records then replace by 10. If you want all the records then remove this line 
+0

Pourriez-vous m'expliquer ce que cette requête est en train de faire? – SearchingSolutions

+0

D'accord, je le ferai. Ecrire un commentaire à la réponse –

+0

@SearchingSolutions Est-ce que ma réponse fonctionne pour vous. Dans le cas où une autre requête s'il vous plaît laissez-moi savoir –

0

Même si la réponse de Channaveer Hakari fonctionnait parfaitement bien, j'ai trouvé une requête plus courte pour cela:

SELECT * FROM `Blog` b JOIN (SELECT c.Reference, Count(*) AS cnt FROM `Comments` c GROUP BY c.Reference) d ON (d.Reference=b.ID) ORDER BY cnt DESC;