2 SQL Abfragen über insgesamt 3 Tabellen in eine Abfrage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 2 SQL Abfragen über insgesamt 3 Tabellen in eine Abfrage

    Moin,

    ich versuche gerade krampfhaft 2 sql abfragen zu einer zu kombinieren.
    allerdings, naja, kommen dabei mehr daten bei raus, als es eigentlich dürften. um das ganz etwas zu skizzieren hab ich hier einmal die 3 tabellen um die es geht:

    hier sind die daten zu datein drinne, die ich versuche abzufragen
    PHP-Code:
    CREATE TABLE IF NOT EXISTS `se_media` (
      `
    idint(11NOT NULL auto_increment,
      `
    hashvarchar(32NOT NULL,
      `
    headlinevarchar(255NOT NULL,
      `
    subtitlevarchar(255NOT NULL,
      `
    infotextlongtext NOT NULL,
      `
    filevarchar(255NOT NULL,
      `
    typevarchar(255NOT NULL,
      `
    behaviorvarchar(255NOT NULL,
      `
    categoryint(11NOT NULL,
      `
    priorityint(11NOT NULL,
      `
    activeint(11NOT NULL,
      `
    hitsint(11NOT NULL,
      `
    timestampdatetime NOT NULL,
      
    PRIMARY KEY  (`id`)

    dann hab ich 2 relationstabellen, einmal usergroups
    PHP-Code:
    CREATE TABLE IF NOT EXISTS `se_usergroups2media` (
      `
    idint(11NOT NULL auto_increment,
      `
    usergroupvarchar(255NOT NULL,
      `
    mediavarchar(255NOT NULL,
      
    PRIMARY KEY  (`id`)

    und die branchen
    PHP-Code:
    CREATE TABLE IF NOT EXISTS `se_industries2media` (
      `
    idint(11NOT NULL auto_increment,
      `
    industryvarchar(255NOT NULL,
      `
    mediavarchar(255NOT NULL,
      
    PRIMARY KEY  (`id`)

    nun hab ich also such wert jeweils eine gruppe und eine branche.

    zum testen hab ich jetzt erstmal nur eine join auf 2 tabelle gebastelt,
    die scheinbar bei beiden kriterien funktionert:
    PHP-Code:
    SELECT `se_media`.*, `se_usergroups2media`.`usergroup`
    FROM `se_media`, `se_usergroups2media`
    WHERE 
    (`se_usergroups2media`.`media` = `se_media`.`hash` AND 
    `
    se_usergroups2media`.`usergroup` = "gruppeXYZ" AND `se_media`.`active` = 1)

    SELECT `se_media`.*, `se_industries2media`.`industry`
    FROM `se_media`, `se_industries2media`
    WHERE 
    (`se_industries2media`.`media` = `se_media`.`hash` AND 
    `
    se_industries2media`.`industry` = "brancheXYZ" AND `se_media`.`active` = 1
    was ich nun versucht habe, sieht so aus:
    PHP-Code:
    SELECT `se_media`.*, `se_usergroups2media`.`usergroup`, `se_industries2media`.`industry`
    FROM  `se_usergroups2media`, `se_industries2media`, `se_media`
    WHERE 
    (`se_usergroups2media`.`media` = `se_media`.`hash` AND 
    `
    se_usergroups2media`.`usergroup` = "gruppeXYZ" AND `se_media`.`active` = 1) OR
    (`
    se_industries2media`.`media` = `se_media`.`hash` AND 
    `
    se_industries2media`.`industry` = "brancheXYZ" AND `se_media`.`active` = 1
    jetzt ist es so das die zusammengelegte abfrage zB 9 ergebnisse liefert.
    die beiden kleinen aber nur je 2, wobei der select für `se_usergroups2media`.`usergroup` auch nur zur sichtkontrolle ist, ob auch wirklich nur die richtigen daten geladen werden....

    hinterher muss da dann auch noch ein group drauf, weil ich letztlich ja nur jeweils einmal das jeweilige dokument aus der media brauche ...

    kann mir da jemand helfen, dieses chaos zu sortieren?
    weil auch mit einlesen, kriege ich das mit den joins irgendwie noch nicht richtig auf die kappe ...

    grüße,
    jon

    edit ....

    ok, ich hab jetzt einfach mal die logik anders gestrickt ... kann mir jmd bestätigen das ich damit irgendwie richtig liege?
    PHP-Code:
    SELECT `se_media`.*, `se_usergroups2media`.`usergroup`, `se_industries2media`.`industry`
    FROM `se_media`
    INNER JOIN `se_usergroups2mediaON `se_usergroups2media`.`media` = `se_media`.`hash`
    INNER JOIN `se_industries2mediaON `se_industries2media`.`media` = `se_media`.`hash`
    WHERE (`se_usergroups2media`.`usergroup` = "groupXYZ" OR 
    `
    se_industries2media`.`industry` = "brancheXYZ") AND 
    `
    se_media`.`active` = 1
    GROUP BY 
    `se_media`.`hash`
    ORDER BY `se_media`.`priorityDESC 
    Zuletzt geändert von xJonx; 26.01.2011, 09:45.
    Design & Coding with a breeze of madness at xjonx

  • #2
    Hallo,

    ob es funktioniert, kann ich nicht sagen, aber deine letzte Variante sieht um Längen besser aus als dieser Theta-Style-Kram davor. Syntaktisch und formal gibt's nichts zu bemängeln. Einzig der *-Verweis in den Spaltenreferenzen sollte noch aufgelöst werden.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar

    Lädt...
    X