Toon posts:

[sql] select probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleempje met een select query

ik heb 3 tabellen
profielen, fotoshoot en fotoshoot_images

alles is gekoppeld aan elkaar d.m.v. een uniek user id (uid)

iedere user heeft een profiel en een fotoshoot maar heeft niet standaard fotoshoot_images.

iedere user kan in de tabel fotoshoot_images aangeven welke foto hij wil hebben als thumbnail (selected_thumbnail = yes)

nou heb ik de volgende query:

SELECT id, voornaam, type, new_file_name FROM profielen, fotoshoots, fotoshoot_images WHERE profielen.uid = fotoshoots.uid AND profielen.uid = fotoshoot_images.uid AND zichtbaar = 'yes' AND selected_thumbnail = 'yes'

new_file_name is de file naam van de geselecteerde thumbnail.

deze laat me per user zien het profiel en fotoshoot en de selected_thumbnail. Het probleem is nu dat ik de users die GEEN fotoshoot_images hebben (dus geen selected_thumbnail = yes) oversla....

Hoe moet ik dit oplossen?
deze users bestaan dus niet in de tabel fotoshoot_images

Verwijderd

code:
1
SELECT profielen.id, voornaam, type, new_file_name FROM profielen, fotoshoots, fotoshootimages WHERE profielen.uid = fotoshoots.uid AND zichtbaar = 'yes' GROUP BY 1

:?

  • frietman792
  • Registratie: Augustus 2001
  • Laatst online: 07-09 22:57
Dan zul je moeten werken met een join.

Dan zou het zoiets worden van:
SELECT id, voornaam, type, new_file_name FROM profielen, fotoshoots WHERE profielen.uid = fotoshoots.uid AND zichtbaar = 'yes' AND selected_thumbnail = 'yes'
left join fotoshoot_images on profielen.uid = fotoshoot_images.uid

( ff snel bedacht )

  • dvdhoek
  • Registratie: Februari 2002
  • Laatst online: 30-08 22:07
Hiervoor heb je een OUTER join nodig. In dit geval een left join. De syntax en mogelijkheden van outer joins verschillen per DBMS, maar het zal er ongeveer zo uitzien:

(SELECT id, voornaam, type, new_file_name FROM profielen, fotoshoots WHERE profielen.uid = fotoshoots.uid) A
LEFT JOIN
fotoshoot_images B ON
A.uid = B.uid
WHERE profielen.uid = fotoshoot_images.uid
AND zichtbaar = 'yes'
AND selected_thumbnail = 'yes'

Je zou de verschillende WHERE condities beter nog kunnen verdelen over de subqueries, maar daarvoor moet je weten welke variabele in welke tabel zit.

Ik weet ook niet op welke manier jouw DBMS inner joins en outer joins kan combineren. Het makkelijkste is wellicht het opdelen in 2 queries:

CREATE TABLE table1
SELECT * FROM profielen, fotoshoots
WHERE profielen.uid = fotoshoots.uid

SELECT * FROM A
LEFT JOIN
fotoshoot_images ON
A.uid = B.fotoshoot_images

En dan de nog de where toevoegen aan de van toepassing zijnde query. Zoek in de manual naar voorbeelden van het gebruik van outer joins