- Home
- Categorie
- Coding e Sistemistica
- PHP
- Raggruppamento di record in categorie con GROUP BY
-
Raggruppamento di record in categorie con GROUP BY
Buongiorno avrei bisogno di aiuto per effettuare una query di raggruppamento delle noizie presenti nel mio sito.
Ho una tabella news di cui riporto le colonne interessate:
id, titolo, categoria, dataLe news sono suddivise in 4 categorie e assegno una determinata categoria con i numeri da 1 a 4.
esempio:
id:1
titolo: news1
categoria: 2
data: timestampIl risultato che vorrei ottenere è la suddivisione in colonne (categorie) delle ultime news (le ultime dieci per esempio), così:
Cat1
news4
news3
news2
news1Cat2
news2
news1Cat3
news3
news2
news1Cat4
news1Il massimo che sono riuscito a ottenere invece è la suddivisione in categorie con solo l'ultimo record per ciascuna di esse:
Cat1
news4Cat2
news2Cat3
news3Cat4
news1Con questa query:
SELECT id,titolo,categoria FROM news GROUP BY categoria ORDER BY data DESCHo provato a guardare molti altri tipi di query, anche più complesse, ma non sono sicuro di quale faccia più al caso mio....
-
ciao, sicuramente una parte dei tuoi problemi origina dal fatto che (per come ce l'hai descritto) il tuo db non è in forma normale. Dovresti avere una tabella per le news (id, titolo, id_categoria, data) e una di categorie (id, nome_categoria) dopodiché puoi fare una select sulla tabella delle categorie e usare group_concat per ottenere una stringa che raggruppi le news per categoria, esattamente come nel tuo esempio
guarda qui: dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
-
Ho letto il tuo problema molto velocemente su altri forum (inglesi) ed ho intravisto che qualcuno ha risposto modificando la query in questo modo:
[PHP]SELECT id,titolo,categoria FROM news ORDER BY data DESC GROUP BY categoria[/PHP]
detto francamente non ho avuto la possibilità di testare questa cosa. A quanto pare non sei l'unico che ha questo tipo di problema e poche sono le risposte risolutive a riguardo.Come risposta VELOCE e un bel po "ROZZA" potrei dirti di fare una serie di query in questo modo:
[PHP]SELECT id,titolo,categoria FROM news WHERE categoria = 1 ORDER BY data [/PHP]
e cosi via per le altre 4 categorie al limite usando un ciclo for/next per incrementare il numero della categoria, quindi..giusto per capirci..:[PHP]$num_cat = 1
SELECT id,titolo,categoria FROM news WHERE categoria = $num_cat ORDER BY data[/PHP]Scusa per questa risposta veloce ma non sono con il mio pc, al limite te la faccio piu dettagliata se non hai capito cosa intendo dire.
Facci sapere CIAOOO.
-
io faccio spesso query come questa, utilizzando il group by come dicevo... non è nulla di complicato. Con il group by ottieni una stringa separata da un token che puoi poi esplodere comodamente in php