Ik heb 2 tabellen waarin mijn zoekmachine moet zoeken.

Tabel as_productgroep
=====================
id | artgroep | productnaam | zoek
--------------------------------------------------
15 | E2039 | waterfilter | zeef, doorzichtig
16 | FW393 | pomp | olie, sproei

Tabel as_artikel
================
id | product | artnummer
---------------------------
5 | 15 | Z105-W
6 | 15 | Z105-AB
9 | 15 | Z105-WZ
34 | 15 | Z105-P

Mijn zoekmachine moet zoeken in velden 'productnaam' en 'zoek' van tabel as_productgroep EN in veld 'artnummer' van tabel as_artikel. Daarbij wil ik enkel de gegevens van tabel as_productgroep laten weergeven en niets van tabel as_artikel. Dus de gegevens van mijn zoekresultaat bestaat uit tabel as_productgroep.
Veld 'product' van tabel as_artikel is gelijk aan veld 'id' van tabel as_productgroep. Er kunnen meerdere productid's zijn die wordt gelinkt naar 1 id van tabel as_productgroep.

Het probleem is dat mijn searchquery niet goed werkt.
Mijn query is:
<?php
$sSearchQueryA = "SELECT DISTINCT(".TBL_ART.".product), ".TBL_PRO.".id AS id, ".TBL_PRO.".artgroep AS artgroep, ".TBL_PRO.".productnaam AS productnaam FROM ".TBL_ART." INNER JOIN ".TBL_PRO." ON (".TBL_ART.".product = ".TBL_PRO.".id) WHERE ".TBL_PRO.".zoek LIKE '%".$_POST['zoeken']."%' OR ".TBL_PRO.".productnaam LIKE '%".$_POST['zoeken']."%' OR ".TBL_ART.".artnummer LIKE '%".$_POST['zoeken']."%' ORDER BY ".TBL_PRO.".artgroep ASC";
?>
Als ik zoek op '105' moet zoekmachine uiteindelijk 1 resultaat geven met artgroep E2039. Om ervoor te zorgen dat dubbele resultaten, anders krijg ik 4 dezelfde resultaat, vanuit tabel as_artikel verschijnen doe ik DISTINCT product. Dit werkt allemaal keurig als ik op artikelnummer zoek.
Maar stel dat ik als zoekterm 'water' invul, moet ik uiteindelijk ook 1 resultaat krijgen, maar dit doet hij niet. Hetzelfde geldt als ik op 'zeef' zoek. Ik krijg dan geen resultaat. Het probleem ligt denk ik bij een stukje ON (".TBL_ART.".product = ".TBL_PRO.".id), omdat ik dan niet meer zoek in tabel as_artikel.

Hoe krijg ik de resultaten als ik zoek in tabel as_productgroep?
Mijn volgende query werkt goed zolang ik tabel as_artikel niet integreer met JOIN.
<?php
$sSearchQueryA = "SELECT id, artgroep, productnaam FROM ".TBL_PRO." WHERE zoek LIKE '%".$_POST['zoeken']."%' OR productnaam LIKE '%".$_POST['zoeken']."%' ORDER BY artgroep ASC";
?>
Gebruik in plaats van een INNER JOIN een LEFT JOIN. In dat geval zul je wel even de volgorde van je tabellen om moeten draaien:

SELECT ...
FROM as_productgroep
LEFT JOIN as_artikel ON ( ... )
WHERE ...

Op deze manier worden er ook resultaten weergegeven als er in de artikel tabel geen matches zijn gevonden.
Jeej.. dat werkt.. bedankt.
Ik heb DISTINCT gedaan om dubbele resultaten te filteren, maar is DISTINCT of GROUP BY beter hiervoor?
De enige juiste mogelijkheid hiervoor is het gebruik van DISTINCT. Het gebruik van GROUP BY voor dit doeleinde is iets waarvoor een GROUP BY helemaal niet bedoeld is, en heeft als gevolg dat je onbetrouwbare resultaten terug krijgt/kunt krijgen.

Zie ook mijn tutorial over het juiste gebruik van GROUP BY.

Reageren