Beste medefora mensen,

zal proberen zo duidelijk mogelijk te omschrijven.

Ik heb een 3 tabellen :

hoofd item1 tabel met verschillende details erbij.

tabel soort1
tabel soort2

De hoofd item1 kan verschillende soort1 hebben en verschillende soort2 hebben.


Voorbeeld : Item1 = soort1: geel, groen, blauw en soort2:rond vierkant

Nu wil ik een zoek functie maken waarbij gezocht kan worden op kleur en vorm.
Maar dat betekend dat als item1 rond en blauw is, deze maar 1 keer voorkomt in de result resultaten.

Maar hoe maak ik dat ? Door een inner join query te maken ?
Waar kan ik op zoeken?

Kan iemand mij helpen ?
Breid je sqls eens uit met in de select ook soorthout.hout en raam.vorm (hout alleen in de 1e en beide in de 2e) en laat je volledige resultaten eens zien.
zo bedoel je ?

$data = mysql_query("SELECT deur.RecId as deurid,deur.titel,deur.foto,deur.tekst,soorthout.hout en raam.vorm   FROM deur  inner JOIN soorthout  ON deur.RecId=soorthout.deurid INNER JOIN raam ON  deur.RecId = raam.deurid where soorthout.hout = 'grenen' OR raam.vorm='vierkant'")


nog steeds zelfde.
5,4,2

@edit heb een fout gemaakt, 2 hoor er wel tussen. Ik had naar de recid gekeken. dacht dat 5 2 keer moest voorkomen.
1 opgelost, alleen 1 en 6 laat hij nog niet zien.

misschien dat er fout word gemaakt met : deur.RecId as deurid ?
Bijna: "en raam.vorm" moet natuurlijk ", raam.vorm" zijn, dus komma ipv en.

Maar laat dan de output eens zien.
Misschien dat het helpt als je haakjes gebruikt:

SELECT 
  deur.RecId as deurid,
  deur.titel,
  deur.foto,
  deur.tekst,
  soorthout.hout,
  raam.vorm   
FROM deur  
INNER JOIN soorthout  ON deur.RecId = soorthout.deurid 
INNER JOIN raam ON  deur.RecId = raam.deurid 
WHERE (soorthout.hout = 'grenen') OR (raam.vorm = 'vierkant')
met haakjes helpt niet.

Output in php code:

 while($row = mysql_fetch_array($data)){
   	
	      
			 echo '><';
			 	$newline ='';
			 	if(($i+0) % 4 === 0) $newline = ' newline';
		
			 	echo '<a class="itube" title="" href="deur.php?deur='.$row['deurid'].'">
			 	<div class="lijn '.$newline.'">
			 	<img src="fotos/'.$row['foto'].'"  alt="'.$row['titel'].'" title="'.$row['titel'].'"/>
			
			 	<h2>'.$row['titel'].' - '.$row['hout'].'</h2>
			 	<p>'.$row['tekst'].'</p>
			 	</div>
			 	</a>';


en ik kijk dan vooral naar de link. deur= 5 4 en 1.
Mis dus 2 en 6 op 1 of andere manier.
Ik moet wel iets fout doen lijk me.
Met output bedoel ik het resultaat van de sql statements. Vanuit PHPMyadmin of iets dergelijks waar je de select uitvoert.

Kijk ook even of de data in vorm correct is.
Bij deur 2 zie ik vierkant. als die punt er staat vind je hem niet
Deur 6 heeft geen vorm record dus daarom zie je die ook niet.

Dit komt door je INNER JOIN, dan moet het record er zijn.

Ik begrijp niet waarom je 4 en 1 wel ziet. Deur 4 heeft lege vorm en Deur 1 heeft geen houtsoort.

Bij deur 2 zie ik vierkant. als die punt er staat vind je hem niet < die punt heb ik er automatische bijgezet, die staat natuurlijk niet in de tabel
Deur 6 heeft wel een hout soort grenen waar op gezocht word, dus die moet toch getoond worden ?

Door mijn fout van recid en vorm id heb ik die geedit en in slordigheid 4 leeggehaald. sorry.
deur 1 heeft wel een raam vorm.

Kan ik uit je tekst opmaken dat er bij soort hout en vorm beide ingevuld moeten zijn wil je het in de resulaat zien?

Als ik sql invoer bij phpmyadmin is dit resultaat :

deurid titel foto tekst soorthout vorm
5 test 4.jpg grenen, privefeest
4 test 4.jpg vuren, vierkant
2 test 4.jpg douglas, vierkant

missing : 1 en 6 na mijn idee.
tabellen nog keer correct

Tabel 1 deur - RecId, titel, tekst,hoogte, lengte, breed, klinkhoogte, foto.
Tabel 2 soorthout - RecId deurid, hout
Tabel 3 raam - RecId,deurid, vorm

Tabel 1 : RecId, titel, hoogte, lengte, breed, klinkhoogte, afmeting.
1,deur1,deur1.jpg
2,deur2,deur2.jpg
3,deur3,deur3.jpg
4,deur4,deur4.jpg
5,deur5,deur5.jpg
En verder …


Tabel 2 : RecId deurid, hout
1,3,grenen
2,2,douglas
3,5,grenen
4,4,vuren
5,5,eiken
6,6,grenen

Tabel 3 : RecId, itemid, vorm.
1,1, vierkant
2,4, vierkant
4,5,paralel rechthoekig
5,2, vierkant


Kan ik uit je tekst opmaken dat er bij soort hout en vorm beide ingevuld moeten zijn wil je het in de resulaat zien?

Ja dat is zo, komt door de INNER JOIN.
Als je dat niet kunt gebruiken omdat soms houtsoort of vorm niet aanwezig zijn, moet je LEFT OUTER JOIN gebruiken. Die geeft dan NULL in hout of vorm als het niet voorkomt, dus dat zul je dan ook mee moeten nemen in je WHERE, bijv WHERE soorthout.hout in ('grenen', NULL).

Vwb je resultaat:
Deur 5 klopt want die heeft grenen (en heeft een vorm)
Deur 4 klopt want die is vierkant (en heeft een soorthout)
Deur 2 klopt want die is vierkant (en heeft een soorthout)

Deur 1 heeft geen houtsoort
Deur 3 heeft geen vorm
enz
YES :D het is gelukt :).
damn blij.
*maak even een dansje*

Nu nog de prijs range erin voegen.

Heb ook al getest als je alleen op vorm zoek. Dan geeft hij er 3 weer.
En kan ik zo eeuwig tabbelen erbij voegen met left join?

Heel heel heel erg bedankt!
voor uw geduld, uitleg en hulp.
Mooi, graag gedaan en succes verder.

Als je dan nog even je uiteindelijke sqls hier toont, dan hebben anderen er ook nog wat aan.
natuurlijk wil ik dat doen.
Zal ik ook gelijk klein tutorial van maken ? verschil tussen left join en inner join en hoe je meerdere tabbellen 1 resultaat kan maken ?

Reageren