LIKE query met variabele

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mike van den Berg

Mike van den Berg

08/09/2011 17:11:45
Quote Anchor link
Weet iemand hoe ik de volgende query werkend krijg?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$query = "SELECT * FROM car
  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
 
PHP hulp

PHP hulp

02/12/2020 17:23:57
 
- SanThe -

- SanThe -

08/09/2011 17:31:24
Quote Anchor link
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.
 
Mike van den Berg

Mike van den Berg

08/09/2011 17:37:17
Quote Anchor link
Beste SanThe,
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?
 
- SanThe -

- SanThe -

08/09/2011 17:42:06
Quote Anchor link
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?
 
Mike van den Berg

Mike van den Berg

08/09/2011 17:46:00
Quote Anchor link
Ik zal het wat meer uitleggen, want ik heb allereerst geprobeerd niet alles prijs te geven.
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.
 
- SanThe -

- SanThe -

08/09/2011 17:52:32
Quote Anchor link
Dan werkt jouw query toch. Je moet alleen niet $string = "0:blauw:rood:groen"; doen maar $string = "groen"; of dus een andere kleur.
 
Mike van den Berg

Mike van den Berg

08/09/2011 17:54:38
Quote Anchor link
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
 
- SanThe -

- SanThe -

08/09/2011 17:59:53
Quote Anchor link
Ik denk toch echt dat je beter je datamodel kan aanpassen want dit blijft klooien.
 
Jasper DS

Jasper DS

08/09/2011 18:37:28
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.