Puh ich hab ein blödes Problem hier.
Ich arbeite momentan mit MySQL 4.1.irgendwas
Ich habe zwei tables einer hält die daten, der zweite hält die felddefinitionen.
CREATE TABLE data
(
uid
int(11) NOT NULL auto_increment,
pl_id
int(11) NOT NULL default ‚0‘,
typ_id
int(11) NOT NULL default ‚0‘,
data
mediumtext NOT NULL
) TYPE=MyISAM;
Inhalt des tables:
uid pl\_id typ\_id data
1 5 1 bla
2 5 3 blubb
3 5 4 narf
4 6 1 gnorf
CREATE TABLE fieldtypes
(
uid
int(11) NOT NULL auto_increment,
name
varchar(200) NOT NULL default ‚‘,
datatype
enum(‚varchar‘,‚text‘,‚int‘,‚double‘,‚enum‘,‚undefined‘) NOT NULL default ‚undefined‘
) TYPE=InnoDB;
Inhalt des tables:
uid name datatype
1 str varchar
2 name varchar
3 plz int
4 ort varchar
data und fieldtypes sind also n:m über data.typ_id und fieldtypes.uid verknüpft.
Ein Datensatz macht sich immer an data.pl_id fest, also alle zeilen aus data die z.B. pl_id = 5 haben ergeben einen Datensatz für den User.
Wenn ich also ein „SELECT * FROM data WHERE pl_id = 5“ bekomme ich nur die daten, also brauche ich im grunde immer ein „SELECT d.*, t.* FROM data AS d, fieldtypes AS t WHERE d.typ_id = t.uid AND d.pl_id = 5“.
Jetzt bekomme ich aber natürlich nur die Felder, die auch wirklich in der DB eingetragen wurden, im fall von data.pl_id = 5 fehlt ein eintrag für fieldtypes.uid = 2.
So wie bekomme ich die jetzt raus? Also ich will ein Select machen der mir alle Zeilen aus datatypes zurückgibt, die für eine bestimmte pl_id im data table nicht vorkommen.
Ich hab schon ewig mit JOIN, UNION, IN und GROUP BY rumgespielt, aber irgendwie kam immer Mist dabei heraus.
Über jede konstruktive Antwort (auch wenn die lautet wie ich mein DB-design umbauen muß um überhaupt etwas sinnvolles zu haben) bin ich sehr dankbar!