forTeesSake Geschrieben 5. Juli 2004 Teilen Geschrieben 5. Juli 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 5. Juli 2004 Teilen Geschrieben 5. Juli 2004 hmm... SELECT id FROM fragen WHERE id NOT IN (SELECT fragenid FROM benutzerantworten WHERE benutzerid = 1) sollte dein Problem lösen, denk ich mal. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 5. Juli 2004 Autor Teilen Geschrieben 5. Juli 2004 aber in mysql gibt es leider nicht die möglichkeit select statements zu verschachteln... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
johnhaltonx Geschrieben 5. Juli 2004 Teilen Geschrieben 5. Juli 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 5. Juli 2004 Teilen Geschrieben 5. Juli 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 5. Juli 2004 Teilen Geschrieben 5. Juli 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 5. Juli 2004 Autor Teilen Geschrieben 5. Juli 2004 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 5. Juli 2004 Autor Teilen Geschrieben 5. Juli 2004 also das verschachteln geht nicht, aber enricos lösung geht!!!! danke danke danke vielmals. echt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 5. Juli 2004 Autor Teilen Geschrieben 5. Juli 2004 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 5. Juli 2004 Teilen Geschrieben 5. Juli 2004 OR benutzerId = aktuellerBenutzer Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 6. Juli 2004 Autor Teilen Geschrieben 6. Juli 2004 @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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 6. Juli 2004 Teilen Geschrieben 6. Juli 2004 @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"? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 6. Juli 2004 Autor Teilen Geschrieben 6. Juli 2004 ja, benutzerID gibts in der umfrage tabelle. puhh! schock mich ) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 6. Juli 2004 Autor Teilen Geschrieben 6. Juli 2004 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 6. Juli 2004 Teilen Geschrieben 6. Juli 2004 MySQL kann SubSelects ab Version 4.1.0 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 6. Juli 2004 Autor Teilen Geschrieben 6. Juli 2004 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 6. Juli 2004 Teilen Geschrieben 6. Juli 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 6. Juli 2004 Autor Teilen Geschrieben 6. Juli 2004 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 6. Juli 2004 Teilen Geschrieben 6. Juli 2004 Wie sieht denn aktuell deine Anfrage aus? Wenn du noch ein Feld brauchst, dann nimm es doch einfach noch im Select mit auf. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 6. Juli 2004 Autor Teilen Geschrieben 6. Juli 2004 @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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 6. Juli 2004 Teilen Geschrieben 6. Juli 2004 SELECT fragen.id, antworten.benutzerid FROM fragen LEFT JOIN benutzerantworten as antworten ON fragen.id = antworten.fragenid WHERE antworten.benutzerid = 1 So besser? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 6. Juli 2004 Autor Teilen Geschrieben 6. Juli 2004 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 ) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 6. Juli 2004 Teilen Geschrieben 6. Juli 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 6. Juli 2004 Autor Teilen Geschrieben 6. Juli 2004 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)... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 6. Juli 2004 Teilen Geschrieben 6. Juli 2004 Man, ich steh aber auch aufm Schlauch. Kannst du mal nen Dump machen und per email schicken? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.