Helmo: Abfrage schlecht aufgebaut?

Beitrag lesen

Hi,

ich habe ein Problem mit einer mySQL-Abfrage (mySQL 5.0).
Sie dauert bei mir einfach zu lange, da ich eine scheinbar sehr ungünstige Lösung von Subqueries gewählt habe :D (13 Sekunden Laufzeit).

Ich habe folgendes Szenario.

Eine Tabelle "articles" mit ca 200.000 Datensätzen hat ein Spalte "artnum". Die Datensätze (Spalte "artnum") sehen ca so aus:
art03489-green
art03489-red
art48821-orange
...

Wie man leicht vermuten kann, handelt es sich dabei um Artikelnummern, wobei ein Artikel in verschiedenen Farben erhältlich ist (red, green, orange). Die eigentlich Nummer (zB art03489) bleibt bei farblich unterschieldichen aber sonst gleichen Artikeln ebenfalls gleich.

Nun wollte ich auf einer Seite die 20 beliebtesten Artikel anzeigen lassen. Dazu speichere ich in einer Tabelle "favs" die Nummern (ohne Farbe) in der Spalte "article".
Die Datensätze sehen demnach wie folgt aus:
art03489
art48821
...

Und jetzt kommt mein Problem :-)
Ich möchte auf dieser Seite 20 Datensätze aus der Tabelle "favs" auswählen. Die Datensätze möchte ich noch um die drei Felder "green", "red" und "orange" erweitern. Je nachdem ob ein Artikel in der Farbe existiert, soll in der entsprechenden Spalte eine 1 oder eine 0 stehen. Folgendermaßen soll das ganze dann bspw aussehen (Spalten durch ";" getrennt):

article;red;green;orange
art03489;1;1;0
art48821;0;0;1

Mein SQL-Query sah bisher so aus, braucht aber durch die ganzen Subqueries ganze 13 Sekunden :X

SELECT
article,
(SELECT IF((EXISTS(SELECT * FROM articles WHERE artnum LIKE CONCAT(article,'%red'))),1,0)) AS red,
(SELECT IF((EXISTS(SELECT * FROM articles WHERE artnum LIKE CONCAT(article,'%green'))),1,0)) as green,
(SELECT IF((EXISTS(SELECT * FROM articles WHERE artnum LIKE CONCAT(article,'%orange'))),1,0)) as orange
FROM fav
ORDER BY clicks DESC LIMIT 20

Hat jemand eine Idee, wie ich das ganze beschleunigen kann?

Gruss
Helmo