[SQL] Inefficiente query (JOIN/UNION)

Pagina: 1
Acties:

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
Onderstaande 3 queries heb ik nodig om te zoeken naar hoofd- en subcategorieen en producten. Een drielaagse boom dus. Ik heb telkens die "url" nodig om de link naar de categorie of het product te kunnen maken, dus volgens mij kan ik het niet in één query (met twee unions) zetten. Of wel? :)

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SELECT
    hc.naam naam,
    hc.url hc_url,
    hc.afbeelding afbeelding
FROM hoofdcategorie hc
WHERE hc.naam LIKE "%query%"
OR hc.body LIKE "%query%"

SELECT
    hc.url hc_url,
    sc.naam naam,
    sc.url sc_url,
    sc.afbeelding afbeelding
FROM hoofdcategorie hc
LEFT JOIN subcategorie sc ON hc.id = sc.hoofdcategorie_id
WHERE sc.naam LIKE "%query%"
OR sc.body LIKE "%query%"

SELECT
    hc.url hc_url,
    sc.url sc_url,
    p.productnaam naam,
    p.url,
    p.afbeelding
FROM hoofdcategorie hc
LEFT JOIN subcategorie sc ON hc.id = sc.hoofdcategorie_id
LEFT JOIN product p ON sc.id = p.subcategorie_id
WHERE p.productnaam LIKE "%query%"


De onderstaande query werkt niet, want deze geeft alleen de rijen terug waar een product in zit (maar ik wil dus ook de hoofd- en subcategorien terug krijgen die aan de zoekopdracht voldoen):
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
    hc.naam hc_naam,
    hc.handvat hc_handvat,
    hc.afbeelding hc_afbeelding,
    sc.naam sc_naam,
    sc.handvat sc_handvat,
    sc.afbeelding sc_afbeelding,
    p.productnaam naam,
    p.handvat,
    p.afbeelding
FROM product p
LEFT JOIN subcategorie sc ON sc.id = p.subcategorie_id
LEFT JOIN hoofdcategorie hc ON hc.id = sc.hoofdcategorie_id
WHERE (hc.naam LIKE "%query%"
OR sc.naam LIKE "%query%"
OR p.productnaam LIKE "%query%"

offtopic:
"WHERE" wordt in de laatste query niet goed gehighlight

Verwijderd

Die onderste query vind ik allereerst als veel logischer dan de eerste. Alleen zoek je van product naar subcategorie naar hoofdcategorie. Als je dat nou eens omdraait:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT
    hc.naam hc_naam,
    hc.handvat hc_handvat,
    hc.afbeelding hc_afbeelding,
    sc.naam sc_naam,
    sc.handvat sc_handvat,
    sc.afbeelding sc_afbeelding,
    p.productnaam naam,
    p.handvat,
    p.afbeelding
FROM
    hoofdcategorie hc
    LEFT JOIN subcategorie sc ON hc.id = sc.hoofdcategorie_id
    LEFT JOIN product p ON sc.id = p.subcategorie_id
WHERE
    (hc.naam LIKE "%query%"
    OR sc.naam LIKE "%query%"
    OR p.productnaam LIKE "%query%"

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
*zucht* ik was echt in de veronderstelling dat ik dat al gedaan had. Zeer bedankt voor je reply :)