• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Reihenfolge der Ausgabe einer SQL-Tabelle anhand einer anderen SQL-Tabelle bestimmen

xSTVNx

Mitglied
Ich habe eine SQL-Tabelle mit dem Namen release_entries.
Diese enthält unteranderem die Spalten release_id, release_name, etc...

Ich möchte nun den Inhalt dieser Tabelle Ausgeben.

PHP:
$query = mysql_query("SELECT * FROM release_entries");  

while ($row = mysql_fetch_object($query)) {    
    $release_id = $row->release_id;
    
    echo '...';
}

Die Reihenfolge soll allerdings anhand einer anderen Tabelle bestimmt werden,.

Ich habe eine weitere SQL-Tabelle mit dem Namen user_favs.
Diese enthält die Spalten user_id und release_id.

Ich möchte nun zählen wie viele Datensätze es mit der jeweiligen release_id in user_favs gibt und daraus die Reihenfolge der Einträge der Tabelle release_entries bestimmen (also meiste zu erst).

Wie kann ich das realisieren? Ich weiß so recht keinen Ansatz... :(

Danke!
xSTVNx
 
Zuletzt bearbeitet:
Du musst beide Tabellen miteinander verknüpfen. Nach deiner Beschreibung ist ja release_id die Verknüpfung. Mal ein Beispiel anhand dem Du es für dich ableiten kannst:

Code:
SELECT *
FROM tabelle1, tabelle2
WHERE tabelle1.idspalte = tabelle2.fremdschluesselid

Wenn Du jetzt zusätzlich noch die Anzahl in tabelle2 zählen willst, musst Du GROUP BY und COUNT verwenden. Also:

Code:
SELECT *, COUNT(tabelle1.idspalte) as anzahl
FROM tabelle1, tabelle2
WHERE tabelle1.idspalte = tabelle2.fremdschluesselid
GROUP BY tabelle1.idspalte

Danach kann man dann auch sortieren:
Code:
... ORDER BY anzahl DESC

Damit müsstest Du für dich bereits eine Lösung finden. Optimal ist sie aber nicht. Bedenke: was ist mit Datensätzen in tabelle1 zu der es in tabelle2 keine Entsprechung gibt? Dann schau dir mal LEFT JOIN an ;)
 
Also, bisher hat die von threadi gepostete Variante geklappt.

Nun möchte ich den Query allerdings durch einen LEFT JOIN einer weiteren Tabelle erweitern.

Mit LEFT JOIN - funktioniert nicht.
Code:
SELECT *, COUNT(video_entries.video_id) AS anzahl
FROM video_entries, user_favs
LEFT JOIN author_infos
    ON video_entries.author_id = author_infos.author_id
WHERE video_entries.video_id = user_favs.video_id
GROUP BY user_favs.video_id
ORDER BY anzahl DESC

Ohne den LEFT JOIN funktionierts allerdings...
Code:
SELECT *, COUNT(video_entries.video_id) AS anzahl
FROM video_entries, user_favs
WHERE video_entries.video_id = user_favs.video_id
GROUP BY user_favs.video_id
ORDER BY anzahl DESC

Ich finde/verstehe den Fehler allerdings nicht... :(
 
Zuletzt bearbeitet:
Ich rate mal:
Du hast MySQL5 als Datenbanksystem? Dann musst Du sobald Du einen JOIN verwendest gejointen Tabellen umklammern. Also:

Code:
SELECT *, COUNT(video_entries.video_id) AS anzahl
FROM (video_entries AS a, user_favs AS b)
LEFT JOIN author_infos AS c
    ON a.author_id = c.author_id
WHERE a.video_id = b.video_id
GROUP BY a.video_id
ORDER BY anzahl DESC

Alternativ kannst Du auch gleich einen INNER JOIN verwenden:

Code:
SELECT *, COUNT(video_entries.video_id) AS anzahl
FROM video_entries AS a
INNER JOIN user_favs AS b
ON a.video_id = b.video_id
LEFT JOIN author_infos AS c
    ON a.author_id = c.author_id
GROUP BY a.video_id
ORDER BY anzahl DESC
 
Beide Varianten funktionieren nicht... :/

(mysql_fetch_object(): supplied argument is not a valid MySQL result resource in...)
» bedeutet ja schlicht Fehler im Query, oder?


Wo finde ich denn die Version heraus?
 
Wenn Du phpmyadmin hast, sollte das in den Infos zum Datenbankserver stehen. Ansonsten mal im Handbuch schauen: MySQL :: MySQL 5.0 Reference Manual :: 2.2 Determining your current MySQL version

Der genannte Fehler muss nicht zwingend auf einen SQL-Fehler hindeuten. Das hängt von deiner PHP-Programmierung ab. Wenn Du sauber MySQL-Fehler mit PHP abfangen willst, verwende die dafür vorgesehenen Funktionen mysql_error() etc.

Du solltest außerdem die Statements zuerst im phpmyadmin ausführen um sie zu testen. Wenn sie dort laufen, dann kannst Du sie in deine Programmierung einbinden.
 
Also ich habe die Queries von dir beide im phpmyadmin getestet. Kommt die Meldung "Unknown column 'video_entries.video_id' in 'field list'", obwohl das Feld vorhanden ist...:-(

Und in dem ersten Query von mir (habe die nachträglich editiert gehabt) kommt "#1054 - Unknown column 'video_entries.author_id' in 'on clause'", obwohl das Feld vorhanden ist...

Woran kann das liegen?

btw: Ich habe Version 5.1.63-nmm1-log.
 
Du hast ja auch diese Tabelle mit einem Alias eingebunden. Dann sollte das hier richtiger sein:

Code:
SELECT *, COUNT(a.video_id) AS anzahl
FROM (video_entries AS a, user_favs AS b)
LEFT JOIN author_infos AS c
    ON a.author_id = c.author_id
WHERE a.video_id = b.video_id
GROUP BY a.video_id
ORDER BY anzahl DESC
 
Das funktioniert! :) Genau so hatte ichs auch zuerst, allerdings ohne die Klammern...:oops: Also die fehlenden Klammern waren das eigentliche Problem. Vielen Dank!:mrgreen:
 
irgendwas ist da seltsam. SELECT * und Felder, die nicht Teil von GROUP BY sind? Liefert das ein definiertes Ergebnis? Kriegt MySQL das in der Notierung richtig auf die Reihe?

Ich glaube, zumindest die Entsprechung von video_id und author_id in video_entries ist zudem offenbar redundant. (Anders gesagt: Das Feld ist dort vermutlich falsch platziert)

Ich hätte das spontan wohl so geschrieben:

Code:
SELECT
        *
FROM
    (
        SELECT
                video_id,
                author_id,
                COUNT(*) AS anzahl
        FROM
                video_entries
        GROUP BY
                video_id, author_id
    ) AS x
INNER JOIN
        user_favs AS b
    ON
        x.video_id = b.video_id
LEFT JOIN
        author_infos AS c
    ON
        x.author_id = c.author_id
ORDER BY
        x.anzahl DESC

Ist aber ungetestet und weiß nicht, ob es Mehrwert bringt.
 
Zuletzt bearbeitet:
Zurück
Oben