Hallo,
ich erstelle derzeit ein Bewertungs-Script für Filme. Dabei habe ich folgende zwei Tabellen:
BEWERTUNG
*ratingID
rating
ip
filmID
FILME
*filmID
titel
bild
Mein Problem ist nun, dass ich auf einer aspx-Seite gerne eine Liste (mittels DataList) aller Filme inklusive der Bewertungen ausgeben möchte, ich aber nicht weiß, wie ich die Daten am effizientesten aus der DB (MS SQL Server) bekomme.
Wenn ich einen Film pro Seite anzeigen will, dann kann ich ja leicht über die ID nur die Infos des betroffenen Films auswählen. Bei einer DataList kann ich das aber nicht, oder? Wie soll ich dann also zu jedem Film die dazugehörigen Bewertungen rausholen?
Steh in der Sache derzeit ziemlich am Schlauch. 😉
Hallo Nightline,
das Stichwort wäre hier wohl JOIN 😉
Der dazugehörige SQL-Befehl würde dann so aussehen (ungetestet):
SELECT
F.filmID, F.titel, F.bild, B.ratingID, B.rating, B.ip
FROM
(FILME AS F INNER JOIN BEWERTUNG AS B ON F.filmID=B.filmID)
WHERE
mEiNeBeDiNgUnG;
Hier muss halt irgendeine Bedingung her, oder wenn Du die Bedingung weglässt, dann erhälst Du alle Filminformationen, die in den Ratings enthalten sind. Das ist jetzt etwas was Du entscheiden musst.
Hoffe, das hilft Dir?
Ciao
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Naja, hilft leider nicht. 😉
Ich benötige von beiden Tabellen unterschiedliche Infos:
Command-String Filme:
SELECT * FROM filme // Alle Filme mit Titel und Bild auswählen
Command-String Bewertung:
SELECT SUM(rating), COUNT(*) FROM bewertung WHERE filmID = @filmID //Anzahl aller Stimmen und Summe der Bewertungen für einen Film
Wie du siehst benötige ich hier zwei Abfragen, was ja kein Problem ist, solange ich EINEN Film auf EINER Seite anzeige. Da kann ich ja einfach zwei DataReader-Objekte nehmen und die Infos rausholen.
ABER:
Wenn ich nun ALLE Filme als Liste anzeigen will, dann muss ich dem DataList-Objekt ein DataSet zuweisen, in dem bereits alle benötigten Infos drinnen stehen. Das heißt ich bräuchte einen statt zwei Command-Strings.
Hoffe ich habe mich nun klarer ausgedrückt. 🙂
Nein, brauchst du nicht!
SELECT titel, bild, ip, rating
FROM Bewertung
INNER JOIN Filme
ON Bewertung.filmID = Filme.filmID;
gibt alle Filme UND alle Bewertungen aus.
Für alle Filme mit Bewertung oder keiner Bewertung musst du dann LEFT JOIN anstelle von INNER JOIN nehmen.
Stimmt, gibt mir alle aus. Leider benötige ich nicht jede einzelne Bewertung, sondern eben die Summe und die Anzahl für jeden Film. Wenn ich also für einen Film 50 Stimmen habe, dann interessiert mich nur die Summe der Stimmen und dass es eben 50 Stück sind.
Also leider auch nicht die Lösung, aber trotzdem Danke!
SELECT title, SUM(rating)
FROM Bewertung
INNER JOIN Filme
ON Bewertung.filmID = Filme.filmID
GROUP BY title, rating;
Funkt! 🙂
Geht ja doch einfacher als ich dachte... Vielen Dank!!
Falls noch Schwierigkeiten auftauchen meld ich mich nochmals hier.
Hallo zusammen,
dann bin ich ja beruhigt, dann war ich mit meinem Ansatz ja nicht verkehrt 😉
Ciao
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”