Hallo Andre
ein typisches Beispiel für eine UNION-Abfrage. Das kann allerdings mysql nicht.
- Bsp(noch besser ;-)):
tab1.id tab1.name tab2.info
1 André NULL
1 NULL 123
1 NULL 145
1 NULL 156
2 Swen Null
2 NULL 222
2 NULL 333
.
.
usw.
Auf der Console klappt folgendes:
create temporary table test.tmp (id INT not null, name VARCHAR (100), info VARCHAR (100));insert into test.tmp select test.tab1.id,Name,'' as info from test.tab1;insert into test.tmp select test.tab2.tab1_id,'' as Name, test.tab2.info as info from test.tab1 left join test.tab2 on test.tab1.id=test.tab2.ta
b1_id;SELECT * from test.tmp order by id;drop table test.tmp;
über php geht das nicht in einem Arbeitsgang. Da benötigst du mehrere Zugriffe:
create temporary table test.tmp (id INT not null, name VARCHAR (100), info VARCHAR (100));
insert into test.tmp select test.tab1.id,Name,'' as info from test.tab1;
insert into test.tmp select test.tab2.tab1_id,'' as Name, test.tab2.info as info from test.tab1 left join test.tab2 on test.tab1.id=test.tab2.ta
b1_id;
SELECT * from test.tmp order by id;drop table test.tmp;
An sich kann man schon mit dem Createbefehl ein select auf die auszulesende Tabelle ausführen.
z.B. so:
create temporary table test.tmp select test.tab1.id,Name,'NULL' as info from test.tab1;insert into test.tmp select test.tab2.tab1_id,'NULL' as Name, test.tab2.info as info from test.tab1 left join test.tab2 on test.tab1.id=test.tab2.tab1_id;SELECT * from test.tmp order by id;drop table test.tmp;
Zu beachten ist, im ersten Select müssen alle verwendeten Felder angelegt werden. Nullwerte werden da nicht akzeptiert. Auch ist die Feldlänge der temporären Tabelle immer abhängig vom ersten Select.
Persönlich würde ich mich in diesem Fall jedoch für folgende Variante entscheiden:
select tab1.id,Name,info from tab1 left join tab2 on tab1_id=tab1.id order by id
Hier erhälst du zwar keine Nullzellen, aber gleiche Name erfüllen ja prinzipiell den gleichen Effekt. Werte die einen Eintrag in der Tab1 haben und keinen Eintrag in Tab2 werden ja sowieso zurückgegeben.
Mit "SELECT tab1.*, tab2.* FROM tab2 LEFT JOIN tab1 ON
tab1.id=tab2.id;"
^^^^^^^^^^^^^^^^
habe ich es (siehe Link) "ungefähr" geschaft. Problem ist, "André" werden die falschen Infonummern(tab2.info) zugewiesen.
Du hattest hier nur falsch verknüpft.
Viele Grüße
Antje