Verzwickte DB-Abfrage

querytail

Erfahrenes Mitglied
Hallo zusammen,

ich habe 3 Tabellen und muss diese irgendwie in Verbindung bekommen:

Tab. 1 order

id l userid l odernr l name


Tab. 1 bestellarts

id l orderid l artid l artname


Tab. 3 manrev

id l objectid l text l userid

Nun möchte ich Prüfen, ob in einer Bestellung alle Artikel bewertet wurden (Tab. manrev). Die Orders (Tab. order) sollen nur solange ausgeben werden, bis alle Artikel einer Bestellung (Tab. bestellarts) bewertet wurden.

Die Spalten mit übereinstimmenden Werten sind farblich markiert.

Kann man das mit MySQL machen ?

Grüße & Danke

Michael Meyer
 
Zuletzt bearbeitet:
Also. Ich versuche zu verstehen:
1 Order hat mehrere bestellarts.
Wenn der User die Artikel bewertet wird ein manrev erstellt.
Wenn also userid=1 die orderid=10 eröffnet mit den artid=100,200 und er hat artid/objectid 100 bewertet dann soll angezeigt werden, dass er objectid=200 noch nicht bewertet hat.

Mit einem LEFT JOIN und der Prüfun auf IS NULL kann man fehlende Datensätze finden
So könnte es gehen. Ansonsten den Ersten JOIN un ein Subquery stecken
SQL:
SELECT
	o.*,
	b.*
FROM
	`order` AS o
	INNER JOIN bestellarts AS b
		ON i.id = b.orderid
	LEFT JOIN manrev AS m
		ON i.userid = m.userid
		AND b.artid = m.objectid
WHERE
	m.id IS NULL
 
Zuletzt bearbeitet von einem Moderator:
Hallo und dankeschön,

wofür steht denn "i" ? Da wird mir ein Fehler ausgegeben.

Wenn ich aus dem i ein o mache, dann geht`s. Ist das richtig?

Danke und schönen Abend

Michael Meyer
 
So, nun habe ich alles in phpmyadmin getestet und es funktioniert wunderbar. Im Shop selbst gibt`s aber Probleme. Scheinbar kommt das System nicht mit select * klar. Kann ich auch alle Spalten hintereinander schreiben, statt * zu benutzen?
 
Hallo nochmal,

vielen Dank. Ich hab`s hinbekommen. Es ist immer wieder faszinierend, wie schnell Du die Lösungen aus dem Ärmel schüttelst.

Grüße & Danke

Michael Meyer
 
Zuletzt bearbeitet:
Zurück