[mySQL] Probleem met opbouwen query

Pagina: 1
Acties:

  • wustenveld
  • Registratie: Februari 2002
  • Laatst online: 08-08 17:31
Ik heb al van alles geprobeerd, maar ik kom er niet uit. Dit is een query die een productlijst moet tonen. Nu zijn er hoofditem (productenhoofd) en gedetailleerde gegevens (productdetail), nu is het niet zo'n probleem om deze te combineren. Het probleem is dat sommige hoofditems geen detail gegevens bevatten, wat er voor zorgt dat met de query die ik gebruik geen gegevens voor dat hoofditem getoond worden.

Mijn vraag is wie mij kan helpen om de query zo aan te passen dat het niet uitmaakt of er detailitems voor een product aanwezig zijn. De recordset die er uit komt moet wel op volgorde van hoofditem zijn.

Alvast bedankt voor de eventuele hulp.

De query die ik heb is als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT productdetail.artikelcode,productdetail.maatvoering,productdetail.ean,
productdetail.verpakkingseenheid,productdetail.prijs,ph_lang.omschrijving,
pd_lang.uitvoering,ph_lang.intro,ph_lang.standaard,productenhoofd.artikelgroep 

FROM productdetail 

LEFT JOIN productenhoofd ON (productdetail.ph_id=productenhoofd.id) 
LEFT JOIN ph_lang ON (ph_lang.ph_id=productdetail.ph_id AND ph_lang.TAAL='nld') 
LEFT JOIN pd_lang ON (productdetail.id=pd_lang.pd_id AND pd_lang.TAAL='nld') 

WHERE ph_lang.TAAL='nld' 
ORDER BY productenhoofd.sorteergroep,ph_lang.omschrijving,productdetail.ARTIKELCODE

  • Johnny
  • Registratie: December 2001
  • Laatst online: 21-08 11:56

Johnny

ondergewaardeerde internetguru

Je gebruikt LEFT join, dat betekent dat de linkerwaarde (productdetail.ph_id) belanrijker is dan de rechter (productenhoofd.id)

Met andere woorden: wissel ze om, of maak er RIGHT Join van.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als de productenhoofd-tabel de belangrijkste is, waarom is dat dan niet de tabel waar de elementen uit komen?
Nu kijk je naar productdetail als "meest belangrijke van de query" en hoop je dat er een productenhoofd, ph_lang, etc bij is...

En maak anders op zijn minst van die LEFT JOIN op productenhoofd een RIGHT JOIN, zodat je daarmee aangeeft dat er iig een productenhoofd _moet_ zijn en niet perse een productdetail (maar ik gok dat dat problemen oplevert verderop)

Kortom:
productenhoofd als eerste in je FROM noemen en dan productdetail daaraan "left-joinen".
De ph_lang en pd_lang zou dan ook aan de productenhoofd en niet aan de productdetail moeten joinen en het liefst met een straight/inner join.
Btw, wat doet die WHERE daar dubbelop te zijn met de left join van ph_lang?
Als er perse een ph_lang met taal 'nld' aanvast moet zitten, maak er dan een inner join van en/of haal de AND ph_lang.TAAL = uit de left join weg.

  • wustenveld
  • Registratie: Februari 2002
  • Laatst online: 08-08 17:31
ok bedankt, ik begon me een beetje blind te staren, maar door jullie ging het weer goed :)

Query is nu:
code:
1
2
3
4
5
6
7
8
9
10
11
SELECT productdetail.artikelcode,productdetail.maatvoering,productdetail.ean,
productdetail.verpakkingseenheid,productdetail.prijs,ph_lang.omschrijving,
pd_lang.uitvoering,ph_lang.intro,ph_lang.standaard,productenhoofd.artikelgroep 

FROM productenhoofd 

LEFT JOIN productdetail ON (productenhoofd.id=productdetail.ph_id) 
LEFT JOIN ph_lang ON (ph_lang.ph_id=productenhoofd.id AND ph_lang.TAAL='nld') 
LEFT JOIN pd_lang ON (productdetail.id=pd_lang.pd_id AND pd_lang.TAAL='nld')

ORDER BY productenhoofd.sorteergroep,ph_lang.omschrijving,productdetail.ARTIKELCODE