• User

    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ì
    [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;
    $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>  [/PHP]
    

    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


  • User

    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.

    
    $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* ORDER BY votes DESC LIMIT 3)
    
           //categoria attuale = $categoria*;
           //id articolo con voto più alto = $id[0];
           //id articolo secondo = $id[1];
           //id articolo terzo = $id[2];
    $i++;
    }
    
    

  • User

    intanto grazie per la risposta...counque l'ho aggiustta e provata ma purtroppo non funziona

    eccola

    [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* ORDER BY vote DESC LIMIT 3");

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

    $i++;
    }[/PHP]

    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 🙂