Domanda

Quindi quello che sto effettivamente cercando di realizzare è il filtro più votato su storie. Le storie vengono salvati in una tabella, e tutti i voti in un altro.

Ho questa dichiarazione per ottenere l'ordine delle colonne vid corretta:

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

E poi devo filtrare le storie stesse, e voglio l'essere ordinato così come sono nel primo comma.

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

La cosa è, è l'ordine che ho bisogno, perché la prima istruzione non restituisce tutte le righe che la seconda si fa. Sarebbe ancora meglio, se la prima query potrebbe ordinare la tabella in base allo stato = 1 conteggio in un primo momento, e poi voti totali.

Tutte le idee come partecipare tutto questo in una query SQL? O devo usare PHP in mezzo?

È stato utile?

Soluzione

Se non mi grossolanamente equivoco la struttura, un semplice join dovrebbe funzionare bene:

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

Non sono sicuro di cosa si intende per

Sarebbe ancora meglio, se la prima query potrebbe ordinare la tabella in base allo stato = 1 conteggio in un primo momento, e poi voti totali.

poiché la vostra dichiarazione in cui utilizza solo voto / storie che hanno status = 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top