1
Hallo Jörg,
ich bin (leider mal wieder) am verzweifeln was ein JOIN über mehrere Tabellen angeht.
Ich habe folgende Tabellen:
NAME (Feld1,Feld2,...)
domizile (ID,Katalogtitel)
objekte (ID,DomizilID,ObjektName)
objektattribute_A (ObjektID,AttributID)
objektattribute_B (ObjektID,AttributID)
objektattribute_C (ObjektID,AttributID)
Die Hierarchie ist: Domizil => Objekt => Attribute
Ziel ist es sämtliche Objekte (!) mit ihrem dazugehörigen Domizil und ihren Attributen zu bekommen. Also quasi dann so:
array(ObjektID,ObjektName,DomizilID,Katalogtitel,AttributID1,AttributID2,AttributID3);
also z.B.
array
(
array(0,Objekt0,0,Domizil0,12,3,7);
array(1,Objekt1,0,Domizil0,7,123,5);
array(2,Objekt2,1,Domizil1,6,98,31);
);
Mal von der Ausgabe als Array abgesehen versuche ich das wie folgt:
Das echo count($val) ergibt 19 Einträge aus obwohl nur 4 Domizile mit insgesammt 8 Objekten und 60 Attributen in der DB sind. Meiner Meinung nach sollte er also hier "8 Einträge" finden.
Wenn ich mir die $Domizil_ID ausgeben lasse sehe ich, dass er hier über hundert Schleifen-Druchläufe macht. Es kommt dann auch die PHP-Meldung "Fatal error: Maximum execution time of 30 seconds exceeded in..." bzw. dass ihm der Speicher ausgeht.
Frage1:
Wieso produziere ich hier offenbar eine Endlosschleife bzw. eine große Kombinationenanzahl?
Frage2:
Wie bekomme ich die korrekte Anzahl der Objekte geliefert?
ich bin (leider mal wieder) am verzweifeln was ein JOIN über mehrere Tabellen angeht.
Ich habe folgende Tabellen:
NAME (Feld1,Feld2,...)
domizile (ID,Katalogtitel)
objekte (ID,DomizilID,ObjektName)
objektattribute_A (ObjektID,AttributID)
objektattribute_B (ObjektID,AttributID)
objektattribute_C (ObjektID,AttributID)
Die Hierarchie ist: Domizil => Objekt => Attribute
Ziel ist es sämtliche Objekte (!) mit ihrem dazugehörigen Domizil und ihren Attributen zu bekommen. Also quasi dann so:
array(ObjektID,ObjektName,DomizilID,Katalogtitel,AttributID1,AttributID2,AttributID3);
also z.B.
array
(
array(0,Objekt0,0,Domizil0,12,3,7);
array(1,Objekt1,0,Domizil0,7,123,5);
array(2,Objekt2,1,Domizil1,6,98,31);
);
Mal von der Ausgabe als Array abgesehen versuche ich das wie folgt:
SELECT
domizile.ID DomizilID,
domizile.Katalogtitel,
objekte.ID ObjektID,
objekte.ObjektName,
objektattribute_A.AttributID AttributID1,
objektattribute_B.AttributID AttributID2,
objektattribute_C.AttributID AttributID3,
FROM domizile
LEFT JOIN objekte ON objekte.DomizilID = domizile.ID
LEFT JOIN objektattribute_A ON objektattribute_A.ObjektID = objekte.ID
LEFT JOIN objektattribute_B ON objektattribute_B.ObjektID = objekte.ID
LEFT JOIN objektattribute_C ON objektattribute_C.ObjektID = objekte.ID
$connect = @mysql_query($query) or die(mysql_error());
$val = mysql_fetch_row($connect);
echo count($val);
while($val)
{
echo $Domizil_ID = $val[0];
....
}
Das echo count($val) ergibt 19 Einträge aus obwohl nur 4 Domizile mit insgesammt 8 Objekten und 60 Attributen in der DB sind. Meiner Meinung nach sollte er also hier "8 Einträge" finden.
Wenn ich mir die $Domizil_ID ausgeben lasse sehe ich, dass er hier über hundert Schleifen-Druchläufe macht. Es kommt dann auch die PHP-Meldung "Fatal error: Maximum execution time of 30 seconds exceeded in..." bzw. dass ihm der Speicher ausgeht.
Frage1:
Wieso produziere ich hier offenbar eine Endlosschleife bzw. eine große Kombinationenanzahl?
Frage2:
Wie bekomme ich die korrekte Anzahl der Objekte geliefert?