Rouven: verknüpfte SQL Anfrage über 3 Tabellen

Beitrag lesen

Hello,

Abfrage auf ein Wort, das Benutzer xy bereits falsch beantwortet hat:
select nWord from Tabelle1 left join Tabelle3 on Tabelle1.nID=Tabelle3. sWordID where sUserId=xy and sStatus=0 order by rand() limit 1

OK

Abfrage auf ein Wort, das Benutzer xy noch nicht aufgerufen hat:
select nWord from Tabelle1 left join Tabelle3 on Tabelle1.nID=Tabelle3. sWordID where [...] order by rand() limit 1

hast du den [...]-Teil? Wenn nicht, der müsste sinngemäß auf den leeren JOIN prüfen: WHERE Tabelle3.sWordID IS NULL
falls es mit Tabelle2.sWordID nicht klappt, nimm eine andere Spalte und füge sie ggf. vorne dem SELECT hinzu. Wir wollen prüfen, dass kein Wert zurückkam weil der Join nicht ausgeführt wurde (siehe Left-Join).

Weiter kam ich nicht.

Ich weiß nicht, wie MySQL darauf jetzt reagiert, aber wenn du beide SELECTs per UNION zusammenwirfst und bei der oberen noch der ORDER BY entfernst (das muss bei UNION IIRC beim letzten Statement stehen und gilt dann für das Gesamtergebnis) könntest du das gewünschte Ergebnis haben.
Beachte, dass bei beiden Abfragen die Anzahl/Typen der Spalten übereinstimmen muss. Solltest du also bei der zweiten Abfrage noch eine Spalte ins Select aufgenommen haben, solltest du bei der ersten Abfrage eine  entsprechende Blindspalte aufnehmen, z.B.
SELECT nWord, '' AS dummy FROM Tabelle1...
UNION
SELECT nWord, Tabelle3.anderespalte FROM Tabelle1...
ORDER BY rand() limit 1

MfG
Rouven

--
-------------------
Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums