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 ?
Inderdaad met wat joins.
Eerst maak je rijen met alle mogelijkheden.
Die filter je dan met:

WHERE soort1 = '".$vorm."'
AND soort2 = '".kleur."'


Nu is soort1 en soort2 natuurlijk een waardeloze benaming, aangezien je alsnog niet weet wat het inhoudt.
Is er ook een soort3?
Of spreek je bewust zo abstract mogelijk zodat we er zo min mogelijk van snappen?
Daarnaast is een zin als 'ik heb een 3 tabellen' niet echt duidelijk. Heb je een (één) tabel? Of heb je drie tabellen?
Beste Eddy,

Heel erg bedankt voor uw reactie.
Ik spreek bewust abstract omdat ik dacht dat het juist duidelijkheid gaf. Mijn excuus als dit juist voor onduidelijkheid zorg.

Probeer het nog een keer.
3 tabbellen.

Tabel 1 item1 Met detail informatie zoals afmetingen.
Tabel 2 soort1 Kleuren
Tabel 3 soort2 vorm

Tabel 1 RecId, itemnaam, maat,datum
Item1
Item2
Item3

Tabel 2 : RecId, itemid, kleur.
1,1, blauw
2,1, geel
3,2, groen.
4,3,geel

Tabel 3 : RecId, itemid, vorm.
1,1, rond
2,2, vierkant
3,3, ovaal.
4,1,vierkant

In zoeken gebeuren kan ik dus "filteren"
kleur en vorm met daarbij de resultaten van items.

is dit zo duidelijker ?


[size=xsmall]Toevoeging op 03/11/2014 17:21:56:[/size]


		$data = mysql_query("SELECT * FROM   item1  INNER JOIN soort1 ON item1.RecId=soort1.itemid INNER JOIN soort2 ON  item1.RecId = soort2.itemid")



Als ik dit heb, krijg ik resultaat van alles. Maar niet als ik where erachter zet.




[size=xsmall]Toevoeging op 03/11/2014 19:22:06:[/size]

Ik heb nu dit :


        $data = mysql_query("SELECT * FROM   item1  INNER JOIN soort1 ON item1.RecId=soort1.itemid INNER JOIN soort2 ON  item1.RecId = soort2.itemid where soort1 = 'blauw' OR soort2.vorm='vierkant' ")




Probleem : Als ik $row['RecId'] heb, dan pak ik die van soort1.
En niet van item.

$row['RecId'] kun je oplossen door na de SELECT de velden te (her)noemen die je nodig hebt.
Bijv SELECT item1.RecId AS RecID, soort1.kleur AS kleur, soort2.vorm AS vorm etc.
Bedankt dat helpt.
Zat al aan zoiets te denken.
Alleen volgende probleem. het resultaat moet 4 items zijn. Maar krijg er maar 2 te zien.
In plaats van een INNER JOIN, wat gebeurt er als je een UNION JOIN gebruikt?

Probeer eerst een volledige lijst te krijgen met alle mogelijke varianten van items wat betreft kleuren en vormen.
Nu zegt 'item' ook zeer weinig: gaat het om vazen?
Ik dacht een algemeen iets te maken zodat ik voor algemeen kan gebruiken.
Maar gaat om deuren, bepaald soort hout en vorm raam.

Union gaat toch niet werken ? de tabbellen zijn niet gelijk toch?

Als ik 1 join doe dan gaat wel goed

        $data = mysql_query("SELECT * FROM   item1  INNER JOIN soort1 ON item1.RecId=soort1.itemid  where soort1 = 'blauw'")


krijg ik 3 resultaten.

doe ik

        $data = mysql_query("SELECT * FROM   item1  INNER JOIN soort1 ON item1.RecId=soort1.itemid INNER JOIN soort2 ON  item1.RecId = soort2.itemid where soort1 = 'blauw' OR soort2.vorm='vierkant' ")


krijg ik 5 resultaten en mis ik er 2.
John,

Ik begrijp niet hoe je met de 1e query 3 resultaten kun krijgen als de tabellen zijn zoals je in begin opgeeft (op 3/11 15:17).
Er is enkel Item1 in blauw. En dan in rond en vierkant. Dus 2 resultaten.
Deze query werkt volgens mij toch al niet zo, omdat soort1 = 'blauw' moet zijn soort1.kleur = 'blauw'.

De 2e query zou maar 1 resultaat mogen opleveren. En geen 7.
Hoe kom jij aan 7?

Jan
na 3 dagen testen en proberen heb ik de tabel uitgebreid :).


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.



Krijg 3 resultaten bij deze query

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


recid van deur : 5 3 en 6

doe ik innerjoin beide :


$data = mysql_query("SELECT deur.RecId as deurid,deur.titel,deur.foto,deur.tekst  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'")


recid van deur 5 4 en 2

ik mis dus 3 en 6

Excuus voor onduidelijkheid. Is het zo duidelijker :)?
Heel erg bedankt alvast voor meedenken!
In je 2e query zit een fout: soorthout.deurid = 'grenen' moet zijn soorthout.hout = 'grenen'

Verder begrijp ik niet waarom je deur 2 krijgt, want die is parallel rechthoekig. Ik zou verwachten dat je deur 1 krijgt.

Deur 6 komt niet in je tabel deur voor, dus ook raar dat je die bij je 1e query krijgt. Maar dat kan een foutje in je voorbeeld zijn. Want deurid 6 heeft wel een houtsoort, maar geen deur en geen vorm.
Deur id hoor inderdaad hout te zijn, gecorrigeerd.

ik krijg 5 4 en 2 door.
2 snap ik niks van.
6 stond er wel in maar had ik hier niet op gezet, sorry.

dus ik krijg er 2 niet door, en 1 die er niet thuis hoor.

Reageren