Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

hmm...

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

sollte dein Problem lösen, denk ich mal.

aber in mysql gibt es leider nicht die möglichkeit select statements zu verschachteln...

ich dachte in der 4 geht das...... ?

SELECT column1,column2,column3

FROM t1

WHERE (column1,column2,column3) IN

(SELECT column1,column2,column3 FROM t2);

geht laut Doku von mysql.org

siehe:

http://dev.mysql.com/doc/mysql/en/Row_subqueries.html

John

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

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

hmm, also ich glaube ich sollte heim und ab ins bett.

bei mir will das nicht. ich habe mysql version 4.0.17.

ganz komisch alles...

also das verschachteln geht nicht, aber enricos lösung geht!!!! danke danke danke vielmals. echt.

ah ne leider doch nicht. bei der abfrage von enrico ist der benutzer an sich (mit benutzerID) nicht drin...da beiss ich mir gerade die zähne aus...

@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!

@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"?

ja, benutzerID gibts in der umfrage tabelle. puhh! schock mich ;))

jede einzelne abfrage für sich geht ja:

SELECT id

FROM benutzer

WHERE id

IN ( 1, 2, 3)

UND

SELECT benutzerID FROM umfrage_userantworten

gehen beide...

MySQL kann SubSelects ab Version 4.1.0

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...

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

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!

@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

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 ;))

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

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)...

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.