+ Rispondi alla Discussione
Risultati da 1 a 3 di 3

prendere 3 record di ogni categoria da una sola tabella

Ultimo Messaggio di fabio_198 il:
  1. #1
    User
    Data Registrazione
    Nov 2012
    Località
    catania
    Messaggi
    35

    prendere 3 record di ogni categoria da una sola tabella

    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ì
    Codice 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='
    $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

  2. #2
    User L'avatar di giangel84
    Data Registrazione
    Nov 2005
    Località
    Camposampiero - Padova
    Messaggi
    46
    Segui giangel84 su Twitter Aggiungi giangel84 su Google+ Aggiungi giangel84 su Facebook Aggiungi giangel84 su Linkedin
    Io farei qualcosa di più semplice e ciclico, analizzando ed estraendo univocamente ogni categoria, poi per ciascuna prelevare gli id degli articoli in voting ordinandoli per vote maggiore e limitando a 3 i risultati.

    Eseguendo questa query in modo ciclico estrarrai ad ogni ciclo la categoria attuale e di essa, gli id dei 3 articoli più votati.

    A grandi linee dovrebbe essere qualcosa di simile, anche se sicuramente da correggere.

    Codice:
    $categoria = (SELECT DISTINCT categoria from Link)
    
    $count = count($categoria);
    $i=0;
    
    while ($i < $count) {
    
    $id = (SELECT L.id, V.votes FROM Link AS L INNER JOIN Voting AS V ON L.id = V.items WHERE L.categoria = $categoria[$i] ORDER BY votes DESC LIMIT 3)
    
           //categoria attuale = $categoria[$i];
           //id articolo con voto più alto = $id[0];
           //id articolo secondo = $id[1];
           //id articolo terzo = $id[2];
    $i++;
    }

  3. #3
    User
    Data Registrazione
    Nov 2012
    Località
    catania
    Messaggi
    35
    intanto grazie per la risposta...counque l'ho aggiustta e provata ma purtroppo non funziona

    eccola

    Codice PHP:
    $categoria mysql_query("SELECT DISTINCT categoria from Link");

    $count count($categoria);
    $i=0;

    while (
    $i $count) {

    $id mysql_query("SELECT L.id, V.vote FROM Link AS L INNER JOIN Voting AS V ON L.id = V.item WHERE L.categoria = $categoria[$i] ORDER BY vote DESC LIMIT 3");

           
    //categoria attuale = $categoria[$i];
           //id articolo con voto più alto = $id[0];
           //id articolo secondo = $id[1];
           //id articolo terzo = $id[2];
    $i++;

    così è come poi la richiamo dentro un box fuori dai tag php <h2><?php echo "$id[0]"; ?></h2>

    spero di aver spiegato bene il mio problema e i non aver fatto confusione.

    in sostanza mi serve prendere tutti i valori dei 3 record che hanno più voti di ogni categoria

    come ho scritto prima nell'esempio...io poi vorrei richiamare i volori dento altri box tipo in questo modo

    per richiamare tutti i valori della news che ha più voti della categoria "politics":

    $url[politics1];
    $img[politics1];
    $titolo[politics1];

    questi sono per richiamare tutti i di una sola news che ha preso più voti della categoria politics

    per andare a prendere la seconda che ha preso più voti della categoria politics farò:

    $url[politics2];
    $img[politics2];
    $titolo[politics2];

    spero di aver reso l'idea

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.