login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Join

Offline xSc - 21/06/2006 13:55
Avatar van xScOnbekend Ik ben bezig met een zoekpagina.

Nu gaat het als volgt:

1. producten.product_id = product_specificaties.product_id (mag, hoeft niet)

2. specificaties.specificatie_id = product_specificaties.specificatie_id (moet per se)

Hoe stop ik dat in een query? Als ik bijv. een LEFT JOIN gebruik (1.), dan gaat het natuurlijk fout wanneer ik 2. bij WHERE zet.

7 antwoorden

Gesponsorde links
Offline Ontani - 21/06/2006 13:59
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
SELECT * FROM producten, product_specificaties, speicificaties WHERE ( producten.product_id = product_specificaties.product_id ) AND ( specificaties.specificatie_id = product_specificaties.specificatie_id ) GROUP BY producten.product_id

Probeer die eens
Offline Simon - 21/06/2006 14:02
Avatar van Simon PHP expert 2 joins mss?

  1. <?php
  2. $res = mysql_query("
  3. SELECT
  4. *
  5. FROM
  6. product_specificaties
  7. INNER JOIN producten
  8. ON( producten.product_id = product_specificaties.product_id )
  9. INNER JOIN specificaties
  10. ON( specificaties.specificatie_id = product_specificaties.specificatie_id )
  11. ") or die("Foutje: " . mysql_error());
  12. ?>
Offline xSc - 21/06/2006 14:03
Avatar van xSc Onbekend Ontani, die klopt niet. In jouw query zeg je dus dat er aan de voorwaarde producten.product_id = product_specificaties.product_id voldaan moet worden. Maar ik bedoel dus dat het geen vereiste is.

Zo, zeg maar:

LEFT JOIN product_specificaties ON producten.product_id = product_specificaties.product_id
Offline Thomas - 21/06/2006 14:15
Avatar van Thomas Moderator Als er items in tabel A zitten, die wellicht niet in B zitten, dan gebruik je LEFT JOIN.
Als er items in tabel A zitten, die altijd in tabel B voorkomen, dan kun je deze 2 tabellen koppelen in het WHERE-gedeelte of met een INNER JOIN.

Uit welke tabel uit 1. ontbreken mogelijk gegevens?
Als product_specificaties "achter blijft" bij producten, terwijl je toch alle producten wilt hebben, wordt dit denk ik problematisch om het met één query op te lossen (immers, product_specificaties vormt het aanknopingspunt tussen specificaties en producten).

Tenzij de tabel product_specificaties te schrappen valt? Of is dit meer dan enkel een koppeltabel?
Offline xSc - 21/06/2006 14:19 (laatste wijziging 21/06/2006 14:20)
Avatar van xSc Onbekend FangorN, bedankt.

Het zit zo:

Producten kunnen specificaties hebben, maar dat is niet altijd zo.
(producten.product_id = product_specificaties.product_id)

De specificatie moet aan 1 of meerdere producten hangen, wil het meegenomen in het zoekresultaat (verplicht dus).
(specificaties.specificatie_id = product_specificaties.specificatie_id)

Anders splits ik het wel in meerdere queries 
Offline Thomas - 21/06/2006 15:01 (laatste wijziging 21/06/2006 15:03)
Avatar van Thomas Moderator Ah, okay.

Een product kan 0 of meer specificaties hebben, en omdat een specificatie voor een of meer producten (her)gebruikt kan worden zit er een koppelingstabel (product_specificaties) tussen. Als er eenmaal een link is tussen een product en een specificatie (in product_specificaties), dan moet er een specificatie zijn, klinkt logisch.

Kun je dit niet met een dubbele LEFT JOIN oplossen?

  1. SELECT *
  2. FROM producten p
  3. LEFT JOIN product_specificaties ps ON (p.product_id = ps.product_id)
  4. LEFT JOIN specificaties s ON (ps.specificatie_id = s.specificatie_id)


Ik denk dat als het eerste deel van de LEFT JOIN niets oplevert, de query ook "niet verder kijkt" in specificaties omdat de referentie NULL is?

Probeer het eens uit, en anders gebruik je 2 queries ;).
Offline xSc - 21/06/2006 15:05
Avatar van xSc Onbekend FangorN, bedankt voor het meedenken ;) specificaties heb ik helaas ook nodig in mijn WHERE ;:)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.188s