[RISOLTO]Sub query ORDER BY su 2 tabelle

frenkytribe

Utente Attivo
17 Gen 2013
87
0
0
Ciao,
probabilmente la soluzione è più semplice di quanto creda, ma sono molto confuso.
In ogni articolo che viene visualizzato, sulla desta appaiono gli articoli correlati, che però vorrei ordinare per Like.

Quindi questo è quello che ho fatto.
PHP:
<?
$tit_1=explode(' ',$titolo);
                $liket=" ";
                foreach($tit_1 as $minparola)
                {
                    $liket .= "titolo LIKE '%".Cleanquery($minparola)."%' OR ";
                }
                $liket = substr($liket, 0, -3);
                $query="SELECT id,titolo FROM articolo WHERE $liket LIMIT 0,5"; // ordinare x like
                $risultati=mysql_query($query);
                $num=mysql_num_rows($risultati);
                if ($num==0){
                     echo 'Nessun articolo correlato.';
                }else{
                    $i=0;
                    while ($i<$num){
                        $a_id=mysql_result($risultati,$i,"id");
                        $t=mysql_result($risultati,$i,"titolo");
                        $q_check_si="SELECT * FROM _like WHERE id_articolo='$a_id' AND id_usr_si>0";
                        $check_si=mysql_query($q_check_si);
                        $si_corr=mysql_num_rows($check_si);
                        if($g_id!=$id){
                        ?>
                            <a href="?page=article&act=view&id=<? echo $a_id; ?>">
                            <div align="center" class="correlati" style="padding: 4px; max-width: 210px; border: 1px solid #c0c0c0; border-radius: 4px;">
                                <b><? echo $t; ?></b>
                                <br><br>
                                <div style="color: #000;">Piace a <font color="green"><b><? echo $si_corr; ?></b></font> <? if($si_corr=="1") echo "persona"; else echo "persone"; ?>.</div>
                            </div>
                            </a>
                            <br>
                        <?
                        }
                        $i++;
                    }
                }
?>
 
Prova a modificare questa:
PHP:
                $query="SELECT id,titolo FROM articolo WHERE $liket LIMIT 0,5"; // ordinare x like
Con que
PHP:
                $query="SELECT id,titolo FROM articolo WHERE $liket  ORDER BY like LIMIT 0,5"; // ordinare x like
Ho considerato like come un campo int che tiene il conto dei like su quell'articolo.
 
Se avevi il contatore li non era difficile, anzi.
Come hai risolto?
 
Nell'articolo si può mettere me piace o non mi piace, il contatore viene gestito da una tabella a parte che fa da ponte dove ci sono 3 colonne id dell'articolo, id utente nel caso mettesse mi piace e di utente nel caso mettesse non mi piace.
Se voglio sapere quante persone hanno messo mi piace eseguo una query che conta le righe dove l'id dell'articolo è appunto l'id dell'articolo e id nel caso mettesse mi piace è diverso da 0 (cioè valore di default)
Questo sistema mi è utile per sapere se un utente ha già messo mi piace o meno.
Per il momento sono sul cellulare, quando torno a casa posto la query.
 
O.o ma cosa c'entra? Comunque ho risolto, avevo dimenticato a scriverlo.

toh chi si rivede... il web è piccolo...


Codice:
SELECT a.id, a.titolo, COUNT(l.id_articolo) AS NumeroLike
FROM articolo AS a
LEFT JOIN _like AS l ON (l.id_articolo = a.id)
WHERE $liket
GROUP BY a.id
ORDER BY NumeroLike DESC
LIMIT 0,5


Comunque se apri discussioni su diversi forum è buona norma postare in tutti la soluzione in modo da aiutare chi avrà il tuo stesso problema e soprattutto evitare che altra genete perdi tempo a risolvere un problema che hai risolto al trove...
 

Discussioni simili