#1 27. Mai 2009 Abfrage nur bestimmtes aus 2 tabellen Hallo Leute, irgentwie komme ich nicht weiter. Folgende Situation: 2 tabellen z.B. fragen & antworten tabelle fragen enthällt spalte id tabelle antworten enthällt spalten id + user als bsp. in diesem bsp bin ich user 10 und habe die frage "id=1" bereits beantwortet, also soll diese nicht mehr angezeigt werden. Das mache ich so: Das Problem ist mir fehlt nun die frage "id=3" ich weis das es kein großes ding ist nur ich komm einfach nicht drauf. + Multi-Zitat Zitieren
#2 28. Mai 2009 AW: Abfrage nur bestimmtes aus 2 tabellen t1.id=t2.id das Trifft auf die Frage mit id=3 nicht zu, weil deren Antwort id=2 ist + Multi-Zitat Zitieren
#3 28. Mai 2009 AW: Abfrage nur bestimmtes aus 2 tabellen Code: mysql> select t1.id, t2.id, t2.user from fragen AS t1, antworten as t2 where t1.id=t2.id and t2.user <> '10'; durch die Abfrage sagst du: hole mir von der Tabelle t1 die Spalte id, die Tabelle t2 die spalte id, und von der Tabelle t2 die spalte user. nun sagst du aber, er soll sich nur die IDs holen wo die ID von tabelle t1 und t2 übereinstimmen, Code: +--+--+--+ | id | id | user | +--+--+--+ | 1 | 1 | 10 | | 1 | 2 | 11 | | 2 | 1 | 10 | [B]| 2 | 2 | 11 |[/B] | 3 | 1 | 10 | | 3 | 2 | 11 | +--+--+--+ kann nur dies (oben Fettmakiert), zutreffen da dort beide ids übereinstimmen und dein user != 10 ist. Wenn ich deine frage nun richtig verstehe möchtest du die id 3 aber auch noch mit reinbringen?, wenn ja dann müsstest du es so machen: Code: select t1.id, t2.id, t2.user FROM fragen AS t1, antworten as t2 WHERE t1.id<>'1'; falls du die Lösung nicht gemeint hast schreib mir per PN oder hier nochmal, hab deine Frage nämlich nicht ganz kappiert. nun sollte er dir eigentlich nur noch Code: +--+--+--+ | id | id | user | +--+--+--+ | 2 | 1 | 10 | | 2 | 2 | 11 | | 3 | 1 | 10 | | 3 | 2 | 11 | +--+--+--+ 6 rows in set anzeigen. mfg whenyou + Multi-Zitat Zitieren
#4 28. Mai 2009 Zuletzt von einem Moderator bearbeitet: 14. April 2017 AW: Abfrage nur bestimmtes aus 2 tabellen also ist ganz einfach habs warscheinlich zu undeutlich beschrieben. es soll eine umfarage sein. also wenn ich user 10 die frage schon beantwortet habe soll diese nicht mehr erscheinen. im prinzip so: tabelle fragen: id1, id2, id3 tabelle antworten: id1+user10, nun als bsp soll user 11 noch alle 3 ids angezeigt bekommen user 10 dagegen nur 2 und 3. es kann auch sein das ich die sql tabelle nicht passend dazu angelegt habe also das ist noch alles offen. hoffe das ist so etwas klarer hier noch die bilder in tabelle fragen siht man das die id "2" nur vom user 11 beantwortet wurde und id 3 noch von niemandem. + Multi-Zitat Zitieren
#5 28. Mai 2009 AW: Abfrage nur bestimmtes aus 2 tabellen zwar nicht ganz so sauber aber was solls Code: SELECT t1.id as 'FrageID' FROM fragen as t1 LEFT JOIN antworten as t2 ON t1.id = t2.id WHERE t2.user <> 10 or t2.id IS NULL Liefert alle Fragen die User 10 noch nicht beantwortet hat. für weitere beispiele Code: CREATE TABLE IF NOT EXISTS `answers` ( `id` int(10) NOT NULL, `user` varchar(255) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `answers` (`id`, `user`) VALUES (1, 'harald'), (3, 'harald'), (2, 'PETER'); CREATE TABLE IF NOT EXISTS `questions` ( `id` int(10) NOT NULL auto_increment, `value` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; INSERT INTO `questions` (`id`, `value`) VALUES (1, 'Name?'), (2, 'Gebdatum?'), (3, 'Ort?'), (4, 'Telefon?'); -- QUERY: SELECT t1.id as 'FrageID', t1.value as 'Frage' FROM questions as t1 LEFT JOIN answers as t2 ON t1.id = t2.id WHERE t2.user <> 'Harald' or t2.id IS NULL; -- liefert frage 2 + 4 + Multi-Zitat Zitieren
#6 28. Mai 2009 AW: Abfrage nur bestimmtes aus 2 tabellen Das hilft mir schon etwas weiter. nun habe ich zwar alle wo 10 nicht mit bei ist aber es kommen doppelte ids raus, so schaut es aus nun brauche ich nur noch die t1.id einmalig. + Multi-Zitat Zitieren
#7 28. Mai 2009 AW: Abfrage nur bestimmtes aus 2 tabellen distinct oder group by MySQL :: MySQL 5.1 Reference Manual + Multi-Zitat Zitieren