Noch eine SQL Abfrage

Hallo,

ich habe da mal wieder eine Frage:

ich habe eine Tabelle aus der ich Künstlernamen und deren Alben auslese. In einer anderen Tabelle sollen dann Kommentare zu den Alben stehen. Ich habe mir das so vorgestellt, dass eine Zeile dieser Kommentartabelle aus id, Kommentar und AlbumID besteht. Wobei AlbumID die ID sein soll, die das entsprechende Album in der ersten Tabelle hat, um das zuordnen zu können.

Hoffe, das ist einigermaßen klar…

Ich frage nun die erste Tabelle nach einem Künstlernamen ab und erhalte als ergebnis eine Liste mit den Alben und deren ids. Wie kann ich nun gleichzeitig aus der Kommentartabelle die Kommentare dazu abfragen?

Danke im voraus!

Daniel

hi!

sql-mäßig:

select t1.album ALBUM, t2.kommentar KOMMENTAR
from alben t1, kommentare t2
where t2.alb_id = t1.id
and t2.kuenstlername = ‚Slime‘
order by 1;

ok?

grüße,
tomh

Ich hätte da noch eine Frage…
Hallo,

Danke erst einmal für die Antwort.
Ich habe da noch ein etwas komplizierteres Problem, von dem ich nicht weiß, ob es sich überhaupt per SQL lösen läßt.

Tabelle 1 : id (unique, auto_increment), artist , album
Tabelle 2 : id (unique, auto_increment), album_id , kommentar , rating

album_id enthält eine id aus Tabelle 1 um Kommentar und Rating entsprechend zuzuordnen.

Bis dahin kein Problem, doch jetzt wird’s kompliziert und ich weiß mit meinen bescheidenen SQL Kenntnissen nicht weiter. Benutze übrigens mySQL, falls das wichtig ist…

Ich frage nun Tabelle 1 nach Artists die mit A beginnen ab, und zwar GROUP BY artist, so dass ich pro artist einen Wert für die Anzahl der Einträge mit diesem Artist bekomme.

Also etwa so : SELECT Band, Count(*) from Tabelle 1 WHERE Artist LIKE ‚$char%‘ GROUP BY Artist ORDER BY Artist LIMIT $offset, 30

$char und $offset sind PHP Variablen.

Jetzt die Frage : Wie kann ich in diese Query integrieren

a) ob Kommentare für den artist in Tabelle 2 sind (nur ja oder nein)

b) aus den Ratingwerten aus Tabelle 2 einen Durschschnittswert für den Artist berechnen?

Ich hätte also gerne als Rückgabe der query:

Artist, Anzahl der Alben, Kommentar (nur ja oder nein), Durchschnittsrating aller Ratings für den Artist.

Das Problem, das ich dabei sehe, ist ja das, das mySQL erst einmal rausfinden muß, welche ids aus Tabelle 1 zu dem Artist gehören und dann in Tabelle 2 die entsprechenen Zeilen auslesen muss.

Hoffe, ich konnte mich klar ausdrücken.
Und ich hoffe, das ist machbar, ohne die db umzuorganisieren…

Vielen Dank im voraus!

Daniel

hi!

ev. oracle-mäßig würde es so ausschauen:

select artist,count(*),min(decode(kommenter,null,‚nein‘,‚ja‘)),sum(nvl(rating,0))/count(nvl(rating,0))
from tabelle1 album, tabelle2 kommentar
where album.id = kommentar.alb_id (+)
and upper(album.artist) like ‚A%‘
group by album.artist

hab’s nicht getestet, unter „normalen“ sql-bedingungen müßte es funktionieren - unter mysql auch??

grüße,
tomh