alex: leere zeile und nur null-werte..wieso?? brauche nen rat

hallo.....

wenn ich als id wie hier im beispiel 143 eingebe erhalte ich als erste
tabellenzeile immer ne zeile wo alle spalten null sind.
ich weis auch nicht mehr weiter.
Vielleicht kann mir jemand sagen warum

hier ist meine abfrage:

SELECT m2.menu_id, m2.sort, m2.parent_id, m2.name
    FROM  n_menu m
    LEFT JOIN menu_has_menu mm
        ON  ( m.menu_id = mm.child_id )
    LEFT JOIN n_menu m2
        ON ( mm.menu_id = m2.parent_id )
    LEFT JOIN menu_has_menu mm2
        ON ( m2.menu_id = mm2.child_id )
    WHERE m.menu_id = '143' or m.parent_id = '143'
    GROUP BY m2.menu_id, m2.parent_id, m2.sort
    ORDER BY m2.parent_id,  m2.sort

und das sind die tabellen dazu:

Table structure for table 'menu_has_menu'

CREATE TABLE menu_has_menu (
  menu_id int(10) unsigned NOT NULL default '0',
  child_id int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (menu_id,child_id)
) TYPE=MyISAM;

Dumping data for table 'menu_has_menu'

INSERT INTO menu_has_menu VALUES("0", "137");
INSERT INTO menu_has_menu VALUES("0", "138");
INSERT INTO menu_has_menu VALUES("0", "139");
INSERT INTO menu_has_menu VALUES("0", "140");
INSERT INTO menu_has_menu VALUES("0", "141");
INSERT INTO menu_has_menu VALUES("0", "142");
INSERT INTO menu_has_menu VALUES("0", "144");
INSERT INTO menu_has_menu VALUES("0", "145");
INSERT INTO menu_has_menu VALUES("0", "146");
INSERT INTO menu_has_menu VALUES("0", "147");
INSERT INTO menu_has_menu VALUES("138", "139");
INSERT INTO menu_has_menu VALUES("138", "140");
INSERT INTO menu_has_menu VALUES("138", "141");
INSERT INTO menu_has_menu VALUES("138", "142");
INSERT INTO menu_has_menu VALUES("138", "147");
INSERT INTO menu_has_menu VALUES("140", "141");
INSERT INTO menu_has_menu VALUES("140", "142");
INSERT INTO menu_has_menu VALUES("143", "144");
INSERT INTO menu_has_menu VALUES("143", "145");
INSERT INTO menu_has_menu VALUES("143", "146");
INSERT INTO menu_has_menu VALUES("144", "145");

Table structure for table 'n_menu'

CREATE TABLE n_menu (
  menu_id int(10) unsigned NOT NULL auto_increment,
  parent_id int(10) unsigned NOT NULL default '0',
  name varchar(255) NOT NULL default '',
  sort int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (menu_id)
) TYPE=MyISAM;

Dumping data for table 'n_menu'

INSERT INTO n_menu VALUES("137", "0", "Oberpunkt 1", "1");
INSERT INTO n_menu VALUES("138", "0", "Oberpunkt 2", "2");
INSERT INTO n_menu VALUES("139", "138", "U1_OP 2", "1");
INSERT INTO n_menu VALUES("140", "138", "U2_OP 2", "2");
INSERT INTO n_menu VALUES("141", "140", "U21_OP 2", "1");
INSERT INTO n_menu VALUES("142", "140", "U22_OP 2", "2");
INSERT INTO n_menu VALUES("143", "0", "Oberpunkt 3", "3");
INSERT INTO n_menu VALUES("144", "143", "U1_OP 3", "1");
INSERT INTO n_menu VALUES("145", "144", "U11_OP 3", "1");
INSERT INTO n_menu VALUES("146", "143", "U2_OP 3", "2");
INSERT INTO n_menu VALUES("147", "138", "U3_OP 2", "3");

  1. Hi,

    ich habe - sorry - keine Lust deine Abfrage im Moment genauer zu zerlegen, aber deine NULL-Zeile kommt vom Left-Join:
    Der beginnt mit einer Tabelle aus der im Ergebnis nichts berücksichtigt wird, der Left JOIN übernimmt aber alle Datensätze aus der linken Tabelle. Hast du jetzt also:
    Tab 1:
    1 a
    2 b

    Tab 2:
    2 x
    3 y

    und machst einen tab1 LEFT JOIN tab2 ON zahlenspalte, dann erhälst du ALLE Datensätze aus tab1 gepaart mit den passenden aus tab 2
    1 a NULL
    2 b x

    Wenn du nun natürlich nur die Spalten aus Tabelle 2 selektierst, dann kommt da nur raus:
    NULL
    x

    Genau das passiert bei dir.

    MfG
    Rouven

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Danke für den tip.
      wenn du mal mehr zeit hast, könntest du mir ja nochmal weiterhelfen wie ich das auf mein problem bezogen abändern könnte.

      ich werd jetzt mal schauen ob ichs mit hilfe deiner anregung schon hinbekomm

      gruss alex