LIKE query met variabele
Code (php)
1
2
3
4
5
2
3
4
5
$query = "SELECT * FROM car
WHERE category = '".$category."'
AND (city = '".$city."' OR '".$city."' = '')
AND (color LIKE '%".$string."%' or '".$color."' = '')
";
WHERE category = '".$category."'
AND (city = '".$city."' OR '".$city."' = '')
AND (color LIKE '%".$string."%' or '".$color."' = '')
";
In een tabel sla ik kleuren op als:
blauw:rood:oranje:groen
wanneer een persoon deze kleuren niet heeft gedefinieerd, is het
0:blauw:0:groen
nu wil ik door middel van een $string:
$string = "0:blauw:rood:groen";
welke word ingevuld door een script dat de string aanmaakt
de juiste gegevens uit de database oproepen.
Tot dusver krijg ik met '%".$string."%' geen waarden terug,
maar als ik hier '%blauw%' van maak wel.
Weet iemand hoe ik er voor kan zorgen dat op de plaats van '%blauw%' de variabele met de benodigde kleuren komt te staan?
Gewijzigd op 08/09/2011 17:12:31 door Mike van den Berg
Als dit in je var zit: $string = "0:blauw:rood:groen"; dan moet dat exact zo in de database staan met eventueel aan beide kanten nog wat extra's. Maar wat ik denk is dat jouw datamodel niet klopt. Kijk eens naar normaliseren.
Mijn datamodel is genormaliseerd,
echter is dit het enige dat niet genormaliseerd is,
Kleuren zet ik nu in een tabel door er een VARCHAR van te maken, en die met een explode() weer los te halen.
Ik weet dat dit alles behalve goed is, maar heb nog geen andere manier bedacht hoe ik dit beter kan doen.
Ik heb een tabel color:
color_id
color
advertisement_id
waarbij ik dus wel kan opslaan welke kleuren bij een bepaalde advertentie horen,
alleen heb ik geen idee hoe ik op die manier met een query bijbehorende kleuren ga oproepen.
Heb jij misschien een beter idee?
Maar wat wil je precies weten? Of er rood in zit, of rood en blauw? Of ....? En zitten de kleuren altijd in dezelfde volgorde in de database? En wat gebeurt er als je geel wilt hebben?
Mensen maken een advertentie aan, daarbij verkopen ze een product,
die kan meerdere kleuren bevatten.
Wanneer ik de resultaten filter wil ik dat men met checkboxes kleuren kan aangeven,
maar product #1 heeft bijv. rood en groen, product #2 bijv. blauw en rood.
Als ik dan rood aanvink, moet ik zowel #1 als #2 krijgen, want ze hebben beide rood als kleur meegekregen.
AND (city = '".$city."' OR '".$city."' = '')
dat is een voorbeeld van een klein stukje uit m'n query,
het liefste wil ik iets dat in die stijl kan.
Als ik d.m.v. die string die ik boven noem ga oproepen, zullen kleuren dus altijd in die volgorde worden opgeslagen in de database.
Dan werkt jouw query toch. Je moet alleen niet $string = "0:blauw:rood:groen"; doen maar $string = "groen"; of dus een andere kleur.
maarja, ik weet dus niet welke kleuren iemand met de checkboxes aangeeft, dus kan ik niet aangeven $string = "blauw", maar moet de string variabel worden bepaald dus krijg je iets als $string = "$blauw$rood$groen$paars" waarbij je dus de waarden krijgt
Ik denk toch echt dat je beter je datamodel kan aanpassen want dit blijft klooien.