Halli hallo,
also ich hab gerade ne ganz einfach Ausgabe von Datensätzen programmiert und hab zuerst dafür "LEFT JOINS" benutzt für die 4 Tabellen benutzt...
jetzt is folgendes passiert hab zuerst alle FELDER mit * ausgeben lassen:
SELECT * FROM s_artikel AS t1
LEFT JOIN s_marke AS t3 ON t1.id_marke = t3.id_marke
LEFT JOIN s_zuweisung AS t2 ON t1.id_artikel = t2.id_artikel
LEFT JOIN s_bild AS t4 ON t1.id_artikel = t4.id_artikel
WHERE t4.id_artikel IS NULL
GROUP BY t2.id_artikel
ORDER BY t1.last_update_steps DESC
ging ratz fatz hab keine sekunde auf die 300 Datensätze warten müssen.
Nun hab ich einfach noch ein Spaltenname selbst benannt weil er mir id_artikel immer der letzten Tabelle den Wert nimmt und dadurch bei ein paar NULL drin hat(ist auch so gewollt da ich überprüfen muss wo keine Bilder hochgeladen wurden also -> IS NULL)
dachte ich mir allesklar kein Problem nehm ich halt einfach nen eigenen Name mit t1.id_artikel as id_artikel:
SELECT *, t1.id_artikel as id_artikel
FROM s_artikel AS t1
LEFT JOIN s_marke AS t3 ON t1.id_marke = t3.id_marke
LEFT JOIN s_zuweisung AS t2 ON t1.id_artikel = t2.id_artikel
LEFT JOIN s_bild AS t4 ON t1.id_artikel = t4.id_artikel
WHERE t4.id_artikel IS NULL
GROUP BY t2.id_artikel
ORDER BY t1.last_update_steps DESC
funzt natürlich auch wie gewollt allerdings dauert das ganze jetzt rund 2-3Sekunden langsammer was mich schon sehr verwundert da es doch eigentlich schnell auslesen müsste(hab auch mal nur ein FELD ohne * gemacht gleiche Ergebnis)
Hab dazu auch schon so ein Threads hier gefunden, allerdings suche ich jetzt ne Methode wie ich irgendwie beim auslesen(imo mit mysql_fetch_object) die tabellen name mit angeben kann also direkt ansprechen.
zb $row->t1.id_artikel;
hab mir auch mal mysql_fetch_object ausgeben lassen:
=====================================
stdClass Object ( [id_artikel] => [id_marke] => 4 [titel] => Lozan Tongue Twister [beschreibung] => Smarter Sneaker für alle Fre.... [preis] => 84.90 [spreis] => 0.00 [farbe1] => 0 [farbe2] => 0 [aktiv] => 1 [hersteller_nr] => 0660927 [id_geschlecht] => 0 [last_update_steps] => 2007-03-22 10:05:07 [cross_artikel] => [views] => 57 [marke] => K.SWISS [id_zuweisung] => 232 [id_artikelart] => 0 [id_verwendung] => 0 [id_bild] => [bildpfad] => )
=====================================
Allerdings gruppiert er die spalten namen ja dann anscheinend bzw überschreibt gleich spalten namen mit dem der zuletzten Tabelle vorhandenen.
Ist es möglich mit * den query so zu lassen und die verschiedenen Felder dann direkt anzusprechen?
hier mein ausleseverfahren in PHP:
also ich hab gerade ne ganz einfach Ausgabe von Datensätzen programmiert und hab zuerst dafür "LEFT JOINS" benutzt für die 4 Tabellen benutzt...
jetzt is folgendes passiert hab zuerst alle FELDER mit * ausgeben lassen:
SELECT * FROM s_artikel AS t1
LEFT JOIN s_marke AS t3 ON t1.id_marke = t3.id_marke
LEFT JOIN s_zuweisung AS t2 ON t1.id_artikel = t2.id_artikel
LEFT JOIN s_bild AS t4 ON t1.id_artikel = t4.id_artikel
WHERE t4.id_artikel IS NULL
GROUP BY t2.id_artikel
ORDER BY t1.last_update_steps DESC
ging ratz fatz hab keine sekunde auf die 300 Datensätze warten müssen.
Nun hab ich einfach noch ein Spaltenname selbst benannt weil er mir id_artikel immer der letzten Tabelle den Wert nimmt und dadurch bei ein paar NULL drin hat(ist auch so gewollt da ich überprüfen muss wo keine Bilder hochgeladen wurden also -> IS NULL)
dachte ich mir allesklar kein Problem nehm ich halt einfach nen eigenen Name mit t1.id_artikel as id_artikel:
SELECT *, t1.id_artikel as id_artikel
FROM s_artikel AS t1
LEFT JOIN s_marke AS t3 ON t1.id_marke = t3.id_marke
LEFT JOIN s_zuweisung AS t2 ON t1.id_artikel = t2.id_artikel
LEFT JOIN s_bild AS t4 ON t1.id_artikel = t4.id_artikel
WHERE t4.id_artikel IS NULL
GROUP BY t2.id_artikel
ORDER BY t1.last_update_steps DESC
funzt natürlich auch wie gewollt allerdings dauert das ganze jetzt rund 2-3Sekunden langsammer was mich schon sehr verwundert da es doch eigentlich schnell auslesen müsste(hab auch mal nur ein FELD ohne * gemacht gleiche Ergebnis)
Hab dazu auch schon so ein Threads hier gefunden, allerdings suche ich jetzt ne Methode wie ich irgendwie beim auslesen(imo mit mysql_fetch_object) die tabellen name mit angeben kann also direkt ansprechen.
zb $row->t1.id_artikel;
hab mir auch mal mysql_fetch_object ausgeben lassen:
=====================================
stdClass Object ( [id_artikel] => [id_marke] => 4 [titel] => Lozan Tongue Twister [beschreibung] => Smarter Sneaker für alle Fre.... [preis] => 84.90 [spreis] => 0.00 [farbe1] => 0 [farbe2] => 0 [aktiv] => 1 [hersteller_nr] => 0660927 [id_geschlecht] => 0 [last_update_steps] => 2007-03-22 10:05:07 [cross_artikel] => [views] => 57 [marke] => K.SWISS [id_zuweisung] => 232 [id_artikelart] => 0 [id_verwendung] => 0 [id_bild] => [bildpfad] => )
=====================================
Allerdings gruppiert er die spalten namen ja dann anscheinend bzw überschreibt gleich spalten namen mit dem der zuletzten Tabelle vorhandenen.
Ist es möglich mit * den query so zu lassen und die verschiedenen Felder dann direkt anzusprechen?
hier mein ausleseverfahren in PHP:
PHP-Code:
$sel_artikel = "SELECT *
FROM $tbl_artikel AS t1
LEFT JOIN $tbl_marke AS t3 ON t1.id_marke = t3.id_marke
LEFT JOIN $tbl_zuweisung AS t2 ON t1.id_artikel = t2.id_artikel
LEFT JOIN $tbl_bild AS t4 ON t1.id_artikel = t4.id_artikel
$filter
GROUP BY t2.id_artikel
ORDER BY t1.last_update_steps DESC";
$res_artikel = mysql_query($sel_artikel);
echo mysql_error();
while($row_artikel=mysql_fetch_object($res_artikel))
{
$m++;
$tb_hersteller_nr = $row_artikel->hersteller_nr;
$tb_id_artikel = $row_artikel->id_artikel;
print_r ($row_artikel);
}
Kommentar