2016-10-24 4 views
2

bekommen Ich habe zwei Tabellen:Wie die meisten Downloads Aufzeichnungen

wallpapers:

id  img  cat_id 

downloads:

id  wall_id 
1  10 
2  10 
3  2 
.  . 

Ich möchte alle Tapeten erhalten, die die meisten Downloads von einem bestimmten haben cat_id.

meine Frage:

SELECT * 
FROM wallpapers 
    WHERE cat_id = 10 
    AND id IN 
    (SELECT wall_id 
     FROM (SELECT wall_id, count(*) 
       FROM downloads 
       GROUP BY wall_id 
       ORDER BY count(*) DESC)) 

aber es gibt nichts zurück!


mein Rahmen ist Codeingiter:

$rows = $this->db->query($sql); 

    var_dump($rows); 
    return; 

Ausgang:

bool(false) 
+1

Warum nicht machen eine Verknüpfung anstelle der Verwendung einer Unterabfrage zu bekommen? –

+0

Welche von ihnen ist effizienter? –

Antwort

2

gerade Gruppe sie durch wall_id auf diese Weise Sie jede wall_id insgesamt Downloads erhalten und dann um sie von ihnen zählen

ORDER BY count(downloads.wall_id) DESC 

und Limit hinzufügen

LIMIT 3 

vorausgesetzt, Sie die Top 3 der Downloads
so Ihre letzte Abfrage würde wie diese

SELECT * 
FROM  wallpapers 
JOIN  downloads 
ON  wallpapers.id = downloads.wall_id 
GROUP BY downloads.wall_id ORDER BY count(downloads.wall_id) DESC limit 3 
+0

Beachten Sie, dass GROUP BY ungültig ist und nicht mit neueren MySQL-Versionen arbeitet (außer im Kompatibilitätsmodus). – jarlh

Verwandte Themen