Question

Alors, ce que je suis en train d'essayer d'atteindre est le filtre le plus voté sur les histoires. Les histoires sont enregistrées dans une table, et tous les votes dans un autre.

J'ai cette déclaration pour obtenir l'ordre des colonnes de vid appropriée:

SELECT vid, COUNT(id) AS votecnt 
  FROM votes 
WHERE status = 1 
GROUP BY vid 
ORDER BY votecnt DESC

Et puis je dois filtrer les histoires elles-mêmes, et je veux que le être commandé comme ils sont dans la première clause.

SELECT vid, body, timestamp 
  FROM stories 
WHERE lv = 1 
  AND status = 1

La chose est, c'est l'ordre que j'ai besoin, parce que la première déclaration ne retourne pas toutes les lignes que le second fait. Il serait encore mieux, si la première requête trierait la table en état = 1 comptage dans un premier temps, puis total des voix.

Toutes les idées comment joindre tout cela dans une requête SQL? Ou devrais-je utiliser PHP entre?

Était-ce utile?

La solution

À moins que je suis malentendu grossièrement votre structure simple jointure doit fonctionner correctement:

SELECT stories.vid, body, timestamp, COUNT(votes.id) votecnt FROM stories
INNER JOIN votes ON stories.vid=votes.vid
WHERE stories.lv=1 AND stories.status=1
GROUP BY votes.vid
ORDER BY votecnt DESC

Je ne suis pas sûr de ce que vous entendez par

  

Il serait encore mieux, si la première requête trierait la table en état = 1 comptage dans un premier temps, puis total des voix.

depuis votre déclaration où utilise uniquement des votes / histoires qui ont le statut = 1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top