Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

hi und hallo,

ist mir sehr peinlich, aber ich habe echt ein problem die richtige mysql-abfrage zu folgendem problem zu finden. (ich glaube mir fehlt irgend ein keyword...)

tabellen

1.fragen

id (PS)

text

2.antworten

id (PS)

fragenID

text

3.benutzerantworten

fragenID

antwortID

benutzerID

es ist ein ganz einfaches umfragesystem

jeder benutzer soll zu jeder frage genau eine antwort geben können

danach ist die frage für ihn nicht mehr sichtbar (er kann sich nur noch die auswertung anschauen)

ich benötige nun eine mysql-abfrage um herauszufinden welche FRAGEN ein benutzer noch nicht beantwortet hat.

beispiel:

benutzer 1 hat von 6 existenten fragen frage 1 und 3 bereits beantwortet.

die abfrage soll mir nun liefern, dass er frage 2,4,5 und 6 noch nicht beantwortet hat.

*schämeinbisserl*

vielen dank im voraus

Geschrieben
hmm...

SELECT id FROM fragen WHERE id NOT IN (SELECT fragenid FROM benutzerantworten WHERE benutzerid = 1)

sollte dein Problem lösen, denk ich mal.

das sollte auch gehen

Geschrieben

1. Möglichkeit:

ein LEFT JOIN von Fragen auf Benutzeranatworten, in der Where-Bedingung prüfst du ob benutzerantworten.fragenid IS NULL

2. Möglichkeit:

ein RIGHT JOIN von den Antworten zu den Fragen, gleiches Vorgehen

Geschrieben

@enrico: hmm, aber dann bekomme ich ja wieder antworten die der benutzer schon gegeben hat!? :(

und nochmal zu den subqueries.

ich probiere folgendes (ganz einfach, hat mit der sache nix zu tun!)

SELECT id

FROM benutzer

WHERE id

IN (

SELECT benutzerID FROM umfrage_userantworten )

also alle benutzer, die eine antwort gegeben haben.

aber da kommt bei mir immer: (standard error)

"#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT benutzerID"

wie gesagt mysql 4.0.17 ahhhhhhhhhhhhhhhhhhhhhhhhh!

Geschrieben
@enrico: hmm, aber dann bekomme ich ja wieder antworten die der benutzer schon gegeben hat!? :(

und nochmal zu den subqueries.

ich probiere folgendes (ganz einfach, hat mit der sache nix zu tun!)

SELECT id

FROM benutzer

WHERE id

IN (

SELECT benutzerID FROM umfrage_userantworten )

also alle benutzer, die eine antwort gegeben haben.

aber da kommt bei mir immer: (standard error)

"#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT benutzerID"

wie gesagt mysql 4.0.17 ahhhhhhhhhhhhhhhhhhhhhhhhh!

gibts in der Tabelle "umfrage_userantworten" eine spalte "benutzerID"?

Geschrieben

töröööööö! daran liegts also ;) dann werde ich mir die mal draufpacken.

vielen dank!

eine anschliessende frage hätte ich aber nopch. OT sozusagen, bidde nicht schimpfen:

finde ich die von meinem provider verwendete mysql in der phpinfo??

da sehe ich folgenden wert:

MYSQL

Client API version 3.23.49

heisst das, dass der provider mit der version 3.23.49 arbeitet, oder gibt der wert für API version irgend entwas anderes an...?

EDIT: sehe gerade, dass die 4.1 ja erst ne beta ist. hilft mir also im mom nicht weiter.

vielleicht weiss doch noch jemand nen weg wie mans ohne subqueries lösen kann...

Geschrieben

Muss denn umbedingt eine SQL Anweisung sein?

Mach doch zwei draus.

Erst ermittelst Du alle Fragen und danach prüfst Du bei jeder Frage ob der User diese schon beantwortet hat. Oder Du ermittelst erst alle Fragen die der User beantwortet hat und dann läst Du dir nur noch die Fragen ausgeben die er noch nicht beantwortet hat.

WHERE fragen NOT in (1, 4, 5, 9)

Frank

Geschrieben

das ist völlig richtig, und leider werde ich es auch so machen müssen wies aussieht.

ich wollte nur gerne eine saubere einfache (im doppelten sinne;)) und schnelle sache machen.

aber du hast recht: davon hängt ja der erfolg nicht ab.

vielen dank an alle!

Geschrieben

@enrico

meine abfrage ist noch deine erste (der left join) aber wenn ich benutzerID mit aufnehme, dann bekomme ich eben wieder fragen die der benutzer schon beantwortet hat.

wenn ich nicht nach benutzerID abfrage, dann bekomme ich alle benutzerantworten, also auch bei benutzer 1 die beantworteten von benutzer 2. heisst, dass obwohl benutzer 1 z.b. frage 1 noch nicht beantwortet hat er die frage nicht mehr bekommt weil benutzer 2 frage 1 schon beantwortet hat.

alles verwirrend. sorry

Geschrieben

und das ganze nun negiert! denn jetzt bekomme ich ja wieder die fragen die der benutzer mit der id 1 bereits beantwortet hat...

langsam wirds arg. bidde enrico, stress dich nicht wegen mir!!!

(schön wärs natürlich schon wenn ich noch ne lösung finde ;))

Geschrieben

SELECT

fragen.id,

antworten.benutzerid

FROM

fragen

LEFT JOIN benutzerantworten as antworten

ON fragen.id = antworten.fragenid

WHERE

antworten.benutzerid = 1 AND

antworten.fragenid IS NULL

Geschrieben

leider auch nicht, denn wenn benutzerID 1 ist UND antworten.fragenID NULL kriege ich leider gar keine unbeantwortete frage, da beides gleichzeitig nicht zutreffen kann. (ich meine benutzerID = x AND fragenID = NULL)...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...