prendere 3 record di ogni categoria da una sola tabella

fabio_198

Utente Attivo
8 Nov 2012
53
0
0
Salve ragazzi!

Ho una tabella chiamata "link"...dove metto delle news...ogni news ha un campo "categoria" (es. politica, sport, musica ecc),
Ogni news ha dei voti che stanno nella tabella "voting", la correlazione tra le due tabelle è che il campo "item" nella tabella voting è uguale al campo "id" nella tabella link

Ora a me serve prendere le 3 news che hanno il maggior numero di voti per ogni categoria.

se faccio così

PHP:
$query = mysql_query("SELECT * FROM link WHERE categoria='politics' ORDER BY id DESC"); 
                                                while ($list = mysql_fetch_array($query)) {
                                                        $indurl = $list['url'];
                                                        $indimg = $list['img'];
                                                        $indtitolo = $list['titolo'];
                                                        $inddescr = $list['descr'];
                                                        $indfonte = $list['fonte'];
                                                        $indutentiid = $list['utentiid'];
                                                        $postid = $list['id'];
                                                        $data = mysql_fetch_object(mysql_query('SELECT `vote` FROM voting WHERE item="'.$postid.'"'));
                        
                                                echo "
				<article id='post-215' class='post-215 category-people category-photography category-pretty-girls entry box format-image'>
                                   <div class='entry-content-cnt'>
                                      <div class='entry-content'>
                                         <a href='$indurl' target='_blank'>
	                                 <img src='$indimg' width='100%' /></a>
				      </div>
                                   </div>
				   
			           <div class='entry-desc'>
                                     <a href='$indurl' target='_blank'><h4>$indtitolo</h4></a>
                                        <h6 align='justify'>$inddescr</h6>
	                                   <i class='icon-globe'></i> <a href='http://$indfonte' target='_blank'>$indfonte</a>&nbsp; &nbsp;
		                           <i class='icon-user'></i> <a href='profile.php?username=$indutentiid'>$indutentiid</a>
                                      
				     <div class='entry-meta group'>
			                <table>
	                                   <tr><td>
                                           <a class='muted' href=\"javascript:;\" onclick=\"doAction('$postid','like');\"><button class='btn btn-mini' rel='tooltip' title='You like it?' type='button'><i class='icon-heart'></i> <span id='$postid'>$data->like</span></button></a>
                                           </td>

praticamente funziona solo che crea la struttura del box per tutte uguali...quando invece io devo mettere la news di ogni categoria che ha più voti in un box più grande e via via le altre in box più piccoli.

In poche parole vorrei gestirmi i vari valori di ogni news tipo così: $indtitolo[politics1] che sarebbe il titolo della news che ha preso più voti della categoria politics e via discorrendo.

spero di aver spiegato tutto il più chiaro possibile 0:)
 
Non sei stato molto chiaro :p, comunque potresti provare con una query di questo tipo per i 3 articoli più votati

Codice:
SELECT * FROM link,voting WHERE voting.item=link.id AND link.categoria='politics' ORDER BY voting.vote DESC LIMIT 0,3
 
intanto grazie per la risposta...prova a spiegare meglio

per ogni articolo estraggo titolo, descrizione, immagine, link...
PHP:
while ($list = mysql_fetch_array($query)) {
                                                        $indurl = $list['url'];
                                                        $indimg = $list['img'];
                                                        $indtitolo = $list['titolo'];
                                                        $inddescr = $list['descr'];
                                                        $indfonte = $list['fonte'];
                                                        $indutentiid = $list['utentiid'];
                                                        $postid = $list['id'];
                                                        $data = mysql_fetch_object(mysql_query('SELECT `vote` FROM voting WHERE item="'.$postid.'"'));

il fatto è quando lo devo far stampare in ogni box come faccio?

nel box principale metto ad esempio "$indurl" "$indimg" "$indescr" e fino a quì ci siamo perchè è il primo record che vado a stampare.
ma per andare a stampare il secondo e il terzo record più votato come faccio?? non posso andare a mettere di nuovo quelli perchè mi stampa di nuovo il primo record.

ecco perchè dicevo di far qualcosa come $indurl[politics1] ...spero di aver spiegato meglio :D
 
Credo che qui manchino proprio i fondamenti di sql oppure non ho capito una mazza io xD
Cmq dopo aver fatto la query che ti ha dato nefyt all'interno di un unico ciclo while puoi recuperare tutte le info che ti servono inoltre ti consiglio di non settare tutte quelle variabili ma di richiamarle nella echo direttamente con list['NOME CAMPO']

il codice dovrebbe essere cosi (non ho modificato la parte di settaggio variabili)

PHP:
$query = mysql_query("SELECT * FROM link,voting WHERE voting.item=link.id AND link.categoria='politics' ORDER BY voting.vote DESC LIMIT 0,3"); 
                                                while ($list = mysql_fetch_array($query)) {
                                                        $indurl = $list['url'];
                                                        $indimg = $list['img'];
                                                        $indtitolo = $list['titolo'];
                                                        $inddescr = $list['descr'];
                                                        $indfonte = $list['fonte'];
                                                        $indutentiid = $list['utentiid'];
                                                        $postid = $list['id'];
                                                        
                        
                                                echo "
                <article id='post-215' class='post-215 category-people category-photography category-pretty-girls entry box format-image'>
                                   <div class='entry-content-cnt'>
                                      <div class='entry-content'>
                                         <a href='$indurl' target='_blank'>
                                     <img src='$indimg' width='100%' /></a>
                      </div>
                                   </div>
                   
                       <div class='entry-desc'>
                                     <a href='$indurl' target='_blank'><h4>$indtitolo</h4></a>
                                        <h6 align='justify'>$inddescr</h6>
                                       <i class='icon-globe'></i> <a href='http://$indfonte' target='_blank'>$indfonte</a>&nbsp; &nbsp;
                                   <i class='icon-user'></i> <a href='profile.php?username=$indutentiid'>$indutentiid</a>
                                      
                     <div class='entry-meta group'>
                            <table>
                                       <tr><td>
                                           <a class='muted' href=\"javascript:;\" onclick=\"doAction('$postid','like');\"><button class='btn btn-mini' rel='tooltip' title='You like it?' type='button'><i class='icon-heart'></i> <span id='$postid'>$data->like</span></button></a>
                                           </td>

facci sapere
 
la query è giusta e va bene...anche prima andava bene..ma il mio problema è che non posso mettere tutto dentro "echo" perchè come mi da i 3 articoli la stessa cosa fa con i box dove stanno... questo è un link provvisorio per far capire meglio http://imagelink.altervista.org/

se prendiamo il box dove c'è scritto politics...è uno grande (il più votato) e due box rettangolari attaccati sotto...(il secondo e terzo più votati)..la stessa cosa per tutte le categorie.

ora...se metto tutto dentro echo...me li da i 3 articoli più votati..solo che mi crea 3 box ognuno con uno grande e due piccoli sotto.
 

Discussioni simili