merkwürdiger SQL SELECT mit IF in osCommerce
merkwürdiger SQL SELECT mit IF in osCommerce
am 18.02.2005 14:13:42 von Goldfisch1980
Es geht um osCommerce.
Ich habe in dem modul "new_products.php" folgenden SQL SELECT ausfindig
gemacht, der probleme hat, wenn sehr viele Artikel in der Tabelle
gespeichert sind (Ich habe mittlerweile rund 2000 Kagegorien und etwa
35.000 Artikel). Alles andere läuft wunderbar, doch folgender aufruf
bringt den mysql server völlig ausser takt:
============
select p.products_id, p.products_image, p.products_tax_class_id,
if(s.status, s.specials_new_products_price, p.products_price) as
products_price from products p left join specials s on p.products_id =
s.products_id where products_status = '1' order by
p.products_date_added desc limit 9
============
Vorallem diese IF Konstellation innerhalb eines SELECTS ist mir noch nie
zwischen die Finger geraten. Gibts hier eine Möglichkeit, dass man den
Select umschreibt oder ihr mir in Worten schreibt, was der hier abfragen
will?
Lass ich den Select über phpMyAdmin laufen, so erhalte ich nach ca. 10
min. den Fehler:
============
Internal Server Error
The server encountered an internal error or misconfiguration and was
unable to complete your request.
Please contact the server administrator and inform them of the time the
error occurred, and anything you might have done that may have caused
the error.
More information about this error may be available in the server error log.
============
Während der SELECT läuft arbeitet mysql unter Windows XP zu 99% und
zwackt sich fast alle Systemressourcen und ich kann fast nix machen.
Ich hoffe jemand weiss abhilfe?
-Lars
Re: merkwürdiger SQL SELECT mit IF in osCommerce
am 18.02.2005 14:41:36 von dev-null-use-reply-adress
Irgendwer -oder was schrieb:
> Es geht um osCommerce.
Eigentlich nicht. Du hast eher ein reines SQL/MySQL Problem,
welches in de.comp.datenbanken.mysql besser aufgehoben wäre.
> Ich habe in dem modul "new_products.php" folgenden SQL SELECT ausfindig
> gemacht, der probleme hat, wenn sehr viele Artikel in der Tabelle
> gespeichert sind (Ich habe mittlerweile rund 2000 Kagegorien und etwa
> 35.000 Artikel). Alles andere läuft wunderbar, doch folgender aufruf
> bringt den mysql server völlig ausser takt:
>
> ============
> select p.products_id, p.products_image, p.products_tax_class_id,
> if(s.status, s.specials_new_products_price, p.products_price) as
> products_price from products p left join specials s on p.products_id =
> s.products_id where products_status = '1' order by
> p.products_date_added desc limit 9
> ============
>
> Vorallem diese IF Konstellation innerhalb eines SELECTS ist mir noch nie
> zwischen die Finger geraten. Gibts hier eine Möglichkeit, dass man den
> Select umschreibt oder ihr mir in Worten schreibt, was der hier abfragen
> will?
Schau' doch bitte erst in's MySQL Manual, wenn Du nach Erklärungen
suchst und frage danach, wenn Du etwas nicht verstehst.
Wir sind ja hier kein Vorlesedienst. meinjanur
Ansonsten würde ich empfehlen, mal mit etwas kleineren Tabellen zu
arbeiten, nur damit Du die Abfrage zum Laufen bekommst, und mit
EXPLAIN überprüfen kannst, was an der Abfrage schlecht ist.
Gruß, JPM
--
A: Weil es dem natürlichen Lesefluß zuwider läuft.
F: Warum ist das denn so schlimm?
A: Eigener Text oben, Zitat unten.
F: Was nervt bei E-Mail am meisten?
Re: merkwürdiger SQL SELECT mit IF in osCommerce
am 18.02.2005 15:57:43 von Goldfisch1980
Jens Peter Möller schrieb:
> Irgendwer -oder was schrieb:
>
>> Es geht um osCommerce.
>
>
> Eigentlich nicht. Du hast eher ein reines SQL/MySQL Problem,
> welches in de.comp.datenbanken.mysql besser aufgehoben wäre.
>
>> Ich habe in dem modul "new_products.php" folgenden SQL SELECT
>> ausfindig gemacht, der probleme hat, wenn sehr viele Artikel in der
>> Tabelle gespeichert sind (Ich habe mittlerweile rund 2000 Kagegorien
>> und etwa 35.000 Artikel). Alles andere läuft wunderbar, doch folgender
>> aufruf bringt den mysql server völlig ausser takt:
>>
>> ============
>> select p.products_id, p.products_image, p.products_tax_class_id,
>> if(s.status, s.specials_new_products_price, p.products_price) as
>> products_price from products p left join specials s on p.products_id =
>> s.products_id where products_status = '1' order by
>> p.products_date_added desc limit 9
>> ============
>>
>> Vorallem diese IF Konstellation innerhalb eines SELECTS ist mir noch
>> nie zwischen die Finger geraten. Gibts hier eine Möglichkeit, dass man
>> den Select umschreibt oder ihr mir in Worten schreibt, was der hier
>> abfragen will?
>
>
> Schau' doch bitte erst in's MySQL Manual, wenn Du nach Erklärungen
> suchst und frage danach, wenn Du etwas nicht verstehst.
> Wir sind ja hier kein Vorlesedienst. meinjanur
>
> Ansonsten würde ich empfehlen, mal mit etwas kleineren Tabellen zu
> arbeiten, nur damit Du die Abfrage zum Laufen bekommst, und mit
> EXPLAIN überprüfen kannst, was an der Abfrage schlecht ist.
>
>
> Gruß, JPM
>
Okay.. Das Problem ist behoben.
Wen es interessiert, es war ein allgemeines Datenbankproblem - hat also
nix mit mySQL oder PHP konkret zu tun -
Bei sehr vielen Artikeln spielt die Angabe der Tabellenreihenfolge eine
sehr grosse Rolle in Bezug auf die Performence!
-Lars