Seite 1 von 1

[SQL] Umfrage

Verfasst: 15.05.2011, 16:04
von The_Real_Black
Hallo ich wollte eine Umfrage auf einer Webseite einbauen, leider komme ich mit meiner SQL Abfrage nicht weiter.

Aufbau der Tabellen:

TabelleA_Umfragen : ID, Frage, (...)
TabelleB_Votings: ID, ID_Frage, UserName

ID_Frage ist der Fremdschlüsel der Umfrage. Der Username ist nur ein String, da ich noch keine User in der DB habe. Nach der Abstimmung soll jeder User nur die von ihm noch unbeantworteten Umfragen sehen: Ich suche also alle Umfragen bei dem der user noch nicht abgestimmt hat, aber wie muss da nun der Select aussehen?

Mit
select Umfrage.* from Umfrage left join Votings on Umfrage.ID = Votings.ID_Frage where not Votings.UserName = "AUserName"
kommt nichts sinvolles raus.
:?:

Re: [SQL] Umfrage

Verfasst: 15.05.2011, 17:29
von Top-OR
Vorwarnung: Ich bin gerade aufgestanden und habe nur mal überflogen. Wenn ich jetzt totalen Brei rede, sorry: Ich bin noch nicht wach.

Mit

SELECT *
FROM Umfrage
JOIN Votings ON Umfrage.ID = Votings.ID_Frage
WHERE Votings.UserName LIKE "AUserName"

solltest du ja rausbekommen, welche Umfragen ein Nutzer schon gemacht hat. Geht DAS soweit, oder kommt da auch Mist raus?

Bringt das Umkehren des Kriteriums mit NOT wirklich die Umfragen, die der Nutzer noch NICHT gemacht hat?
Ich denke NICHT, da der User ja noch keine Einträge in Votings (ist ja nur ne "M-zu-N-Zuordnungstabelle", oder?) hat, sondern die anderen User-Umfragen ...

Oder seh ich das falsch?

Versuch mal mit Subquery:
SELECT * FROM umfrage WHERE umfrage.id NOT IN (SELECT Votings.Frage_ID FROM Umfrage JOIN Votings ON Umfrage.ID = Votings.ID_Frage WHERE Votings.UserName LIKE "AUserName")

Ist jetzt bestimmt NICHT die eleganteste Lösung, aber es sollte gehen...


Anmerkung: SELECT STERN hat der TEUFEL GEMACHT! Rumpelstielzchen *PUFFFFF*

Re: [SQL] Umfrage

Verfasst: 15.05.2011, 19:55
von The_Real_Black
Danke, es klappt!

Re: [SQL] Umfrage

Verfasst: 15.05.2011, 20:27
von Top-OR
Freut mich.

Was mir gerade auffällt: Das JOINEN in dem Inner-Query kannste dir so eigendlich auch sparen. So sollte es reichen:

SELECT * FROM umfrage WHERE umfrage.id NOT IN (SELECT Votings.Frage_ID FROM Votings WHERE Votings.UserName LIKE "AUserName")

Das sollte nochman nen Ticker schneller werden, weil das DBMS dann nicht erst den Join machen muss. Der ist in diesem Zusamenhang völlig für den Garten.


Es gibt möglicherweise auch ne Lösung mit JOINS bzw. ohne die NESTED QUERY, aber da steh ich momentan auch ein wenig auf dem Schlauch ...

Re: [SQL] Umfrage

Verfasst: 20.05.2011, 15:53
von Jaw
Ich hätt was in Richting OUTER JOIN und dann WHERE username is null versucht aber kriegs im Kopf nicht auf die Reihe. Aber hat sich ja eh schon gelöst. Wäre jetzt nur noch Gedankenspiel.

Re: [SQL] Umfrage

Verfasst: 20.05.2011, 16:22
von Top-OR
Jaw hat geschrieben:Ich hätt was in Richting OUTER JOIN und dann WHERE username is null versucht aber kriegs im Kopf nicht auf die Reihe. Aber hat sich ja eh schon gelöst. Wäre jetzt nur noch Gedankenspiel.
Ja, ich würde auch denken, dass sowas geht. Muss gehen, denn die Nested Queries unterstützt zumindest MySQL noch nicht "so lange".
Aber mir gehts ähnlich: Ich bekomm es im Kopf nicht hin (und bin zu faul, es auszuprobieren).