[MySQL 4.0] Neue Spalte mit SELECT

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

  • [MySQL 4.0] Neue Spalte mit SELECT

    Hallo,

    ich habe folgende Datenbankstruktur:

    CREATE TABLE links (
    lid smallint(5) NOT NULL auto_increment,
    cid smallint(5) NOT NULL default '0',
    name varchar(255) NOT NULL default '',
    summary varchar(255) NOT NULL default '',
    href varchar(255) NOT NULL default '',
    has_ebuild smallint(1) NOT NULL default '0',
    PRIMARY KEY (lid),
    UNIQUE KEY name (name)
    ) TYPE=MyISAM PACK_KEYS=0;

    CREATE TABLE versions (
    vid smallint(5) NOT NULL auto_increment,
    lid smallint(5) NOT NULL default '0',
    filename varchar(255) NOT NULL default '',
    added datetime NOT NULL default '0000-00-00 00:00:00',
    ebuild text NOT NULL,
    PRIMARY KEY (vid),
    UNIQUE KEY filename (filename)
    ) TYPE=MyISAM PACK_KEYS=0;

    CREATE TABLE categories (
    cid smallint(5) NOT NULL auto_increment,
    category varchar(255) NOT NULL default '',
    PRIMARY KEY (cid),
    UNIQUE KEY category (category)
    ) TYPE=MyISAM PACK_KEYS=0;


    Ich möchte mir nun den Namen sämtlicher links (links.name) und zusätzlich eine neue Spalte (has_ebuild) anzeigen lassen, mit der Information ob in der Tabelle versions mindestens ein Eintrag zu dem entsprechenden link existiert. Also "1" falls einer oder mehrere Einträge existieren und "0" falls kein Eintrag existiert.
    Ist das mit dieser Tabellenstruktur möglich?
    Die Spalte links.has_ebuild würde ich nämlich gerne entfernen, bekomme aber den oben gewünschten select einfach nicht hin.

    Vielen Dank schonmal,
    dek

  • #2
    Du bauchst einen join und die Funktion IF() dann gehts los...
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Der sticky thread über JOINS war echt hilfreich.
      LEFT JOIN war was mir gefehlt hat. Kannte ich bisher noch gar nicht. *duck*
      Das IF macht dann auch was ich will.

      So hat es dann geklappt:
      Code:
      SELECT t1.name, IF(t2.vid,1,0) AS has_ebuild
      FROM links t1
      LEFT JOIN versions t2
      USING ( lid )
      GROUP BY t1.name
      Danke,
      dek

      Kommentar

      Lädt...
      X