[SQL] Abfrage nur bestimmtes aus 2 tabellen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Aeonsam, 27. Mai 2009 .

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

    Bild

    Bild

    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.
     
  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
    
     
  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.
     
  7. 28. Mai 2009
    AW: Abfrage nur bestimmtes aus 2 tabellen

    distinct oder group by

    MySQL :: MySQL 5.1 Reference Manual
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.