Hallo,
welcher Syntax ist eigentlich besser?
das heißt: "Welche Syntax ist eigentlich besser?"!
ok ;-)
Zwei ellenlange Statements, einziger Unterschied der CROSS JOIN im ersten Fall, der INNER JOIN im zweiten Fall, warum machst Du es Deinen potentiellen Helfern so schwer? Wenn ein INNER JOIN existiert, dann schreib' das auch hin. Also ist meiner Meinung nach die zweite Variante sauberer (und portabler). Der Umgang von MySQL mit CROSS JOINs variiert zwischen MySQL-Versionen und steht zum Teil im Widerspruch zu den SQL-Standards.
kann man unter MySQL 4.1 die Formel in Zwischenschritte untergliedern?
groesse._breite / 1000 * groesse._hoehe / 1000* auflage._auflage * gewicht._bedrgewicht/1000 * groesse._bedrkosten
kommt z.B. 3mal vor
Was hast Du versucht?
bis jetzt noch nichts, da ich unter mysql.com kein passenden Abschnitt gefunden habe
beide Abfragen brauchen laut phpMyAdmin ca. 0.0035 Sekunden
Gibt es eine Möglichkeit, wie man die Abfrage allgemein optimieren kann?
Frag' die Datenbank, nutze EXPLAIN.
die Ausgabe von EXPLAIN sieht bei beiden wie folgt aus
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE produkt const PRIMARY,_gewinnfaktor_FKindex PRIMARY 4 const 1 Using temporary
1 SIMPLE faktor const PRIMARY PRIMARY 4 const 1
1 SIMPLE t1_produkt_has_farbe const PRIMARY,_farb_FKindex,_produkt_FKindex PRIMARY 8 const,const 1 Using index
1 SIMPLE farbe const PRIMARY PRIMARY 4 const 1
1 SIMPLE t1_produkt_has_versandart const PRIMARY,_versandart_FKindex,_produkt_FKindex PRIMARY 8 const,const 1 Using index
1 SIMPLE versandart const PRIMARY PRIMARY 4 const 1
1 SIMPLE t1_produkt_has_auflage const PRIMARY,_produkt_FKindex,_auflage_FKindex PRIMARY 8 const,const 1 Using index
1 SIMPLE auflage const PRIMARY PRIMARY 4 const 1
1 SIMPLE t1_produkt_has_gewicht const PRIMARY,_gewicht_FKindex,_produkt_FKindex PRIMARY 8 const,const 1 Using index
1 SIMPLE gewicht const PRIMARY PRIMARY 4 const 1
1 SIMPLE t1_produkt_has_groesse const PRIMARY,_produkt_FKindex,_groesse_FKindex PRIMARY 8 const,const 1 Using index
1 SIMPLE groesse const PRIMARY PRIMARY 4 const 1
1 SIMPLE ffracht index PRIMARY _aktiv_status_FKindex 1 NULL 3 Using index; Distinct
1 SIMPLE fprodukt ref _fracht_FKindex _fracht_FKindex 4 usrdb_schwetbq_druck.ffracht._fracht_id 1 Using index; Distinct
1 SIMPLE fversandart ref PRIMARY,_fracht_FKindex _fracht_FKindex 4 usrdb_schwetbq_druck.ffracht._fracht_id 1 Using index; Distinct
1 SIMPLE fgewicht ref PRIMARY,_fracht_FKindex _fracht_FKindex 4 usrdb_schwetbq_druck.ffracht._fracht_id 3 Using index; Distinct
1 SIMPLE fgroesse ref PRIMARY,_fracht_FKindex _fracht_FKindex 4 usrdb_schwetbq_druck.ffracht._fracht_id 3 Using index; Distinct
1 SIMPLE fauflage ref PRIMARY,_fracht_FKindex _fracht_FKindex 4 usrdb_schwetbq_druck.ffracht._fracht_id 3 Using index; Distinct
1 SIMPLE ffarbe ref PRIMARY,_fracht_FKindex _fracht_FKindex 4 usrdb_schwetbq_druck.ffracht._fracht_id 3 Using index; Distinct
Die SQL Befehle ohne DISTINCT geben 41.280 Datensätze zurück...
ich fage mich wieso... eigentlich dürfte nur einer rauskommen
warum? Woher sollen wir das wissen? Du hast uns keinen einzigen Deiner Datensätze verraten. Offensichtlich gibt es eben 41.280 verschiedene Möglichkeiten, diese Datensätze in Deinem komplexen JOIN miteinander zu kombinieren, wobei stets der gleiche Preis rauskommt. Wo ist das Problem? Hast Du Rouvens und meinen Artikel zu JOINs gelesen?
Möglicherweise hast Du ein Verständnisproblem, was JOINs betrifft - und machst falsche Annahmen. Zwar hat auch MySQL 4.1 Verständnisproblem, was JOINs betrifft und liefert in bestimmten Fällen systematisch falsche Ergebnisse - aber nicht bei ausschließlicher Verwendung von INNER JOINs wie in Deinem Fall.
könntest du bitte den Link posten?
mfg
Twilo