login  Naam:   Wachtwoord: 
Registreer je!
 Forum

meerdere LIKE statement werken niet (Opgelost)

Offline JLT - 01/11/2011 16:15
Avatar van JLTPHP interesse Hallo iedereen!

Een korte vraag. Waarom geeft de volgende query geen resultaten:

SELECT DISTINCT * FROM voertuig JOIN accessoire ON voertuig.voertuignr_on = accessoire.voertuignr_on WHERE accessoire.accessoire LIKE '%anti blokkeer systeem%'

en de volgende wel:

SELECT DISTINCT * FROM voertuig JOIN accessoire ON voertuig.voertuignr_on = accessoire.voertuignr_on WHERE accessoire.accessoire LIKE '%anti blokkeer systeem%' AND accessoire.accessoire LIKE '%Alarmsysteem%'

Er staan zeker auto's in de DB met zowel ABS als een alarmsysteem. Bij elke query met twee of meer LIKE statements geeft de query niks terug. Wat doe ik fout?

Heeft iemand een idee?

16 antwoorden

Gesponsorde links
Offline pijke - 01/11/2011 16:47 (laatste wijziging 01/11/2011 16:47)
Avatar van pijke Gouden medaille

Lid
Ik weet niet of je de tabelstructuul nog kan veranderen, maar gezien het feit dat auto's meerdere accessoires kunnen hebben, zou ik daar een andere tabel van maken met daarin de velden:
accessoireId, autoId en asseccoire of zoiets.
Dan is het gemakkelijker zoeken en kun je WHERE accessoire.accessoire = ... gebruiken en dat werkt echt veel sneller.
Offline JLT - 01/11/2011 16:55
Avatar van JLT PHP interesse Hoi Pijke,

Bedankt voor je snelle reactie. Ik heb al twee tabellen hieronder de huidige structuur structuur:

Tabel 1 (voertuig)
voertuignr_on ->
merk ->
model ->
enz.

Tabel 2 (accessoire)
voertuignr_on ->
accessoire ->

De laatste tabel kan dus onbeperkt groeien. De overeenkomst tussen beide tabellen is dus 'voertuignr_on' deze is in beide tabellen aanwezig en gelijk. Vandaar de JOIN ON.

Wat bedoel jij precies?
Offline Sam - 01/11/2011 18:22
Avatar van Sam PHP expert Volgens je query moet 1 record in accessoire aan beide LIKE's voldoen, en dat zal nooit gebeuren. Verander die AND door OR om alle records met ABS én diegene met alarmsysteem te selecteren  
Offline JLT - 01/11/2011 19:53
Avatar van JLT PHP interesse En wat dan als ik de resultaten wil verfijnen. Dus bijvoorbeeld:

- ik heb 30 auto's
- waarvan 20 met ABS
- waarvan 10 met alarmsysteem

En ik wil alleen de auto's met ABS en alarmsysteem zien (zodat ik bv. 8 auto's overhou...) Dan moet ik volgens mij toch een soort van AND gebruiken, toch?
Offline vinTage - 01/11/2011 20:06
Avatar van vinTage Nieuw lid Ik denk dat je wel iets bent met deze reactie.
Offline JLT - 01/11/2011 21:24
Avatar van JLT PHP interesse Hoi Vintage

Wat bedoel je daar precies mee?

Grt.
Jelte
Offline vinTage - 01/11/2011 22:53
Avatar van vinTage Nieuw lid Daarin wordt een query opgebouwd adhv de geposte checkboxes.
Als iemand dus een checkbox aanvinkt bij airbag EN bij airco, dan wordt de query uitgebreid met een AND, als er maar een checkbox wordt aangevinkt, dan is enkel de where al voldoende.
Offline JLT - 02/11/2011 10:36
Avatar van JLT PHP interesse HOi Vintage,

Dat klopt zo heb ik het nu ook gedaan voor elke checkbox komt een nieuwe AND regel. Het probleem zit hem erin dat ik in mijn query slechts één WHERE statement kan gebruiken (LIKE of =). Hoe kan ik dan op meerdere opties (Abs, alarm, bekleding enz...) selecteren?

De volgende query geeft dus geen resultaten:

SELECT DISTINCT * FROM voertuig JOIN accessoire ON voertuig.voertuignr_hexon = accessoire.voertuignr_hexon WHERE accessoire.accessoire = 'anti blokkeer systeem' AND accessoire.accessoire LIKE '%Airconditioning%'

Wat doe ik dan precies fout?
Offline Ontani - 02/11/2011 10:56
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Met die query ga je enkel voertuigen krijgen die zowel ABS als Airco hebben. Wil je voertuigen die of ABS of Airco hebben ga je in plaats van een AND een OR moeten gebruiken in je WHERE. Zoals Sam 5 posts terug al zei.
Offline JLT - 02/11/2011 11:01
Avatar van JLT PHP interesse Ja maar dat wil ik dus niet, zoals ik al eerder zei Ik wil juist auto's hebben met ABS EN Airco, maar meerdere AND's werken niet in mijn query... Ideeën?
Offline Ontani - 02/11/2011 11:22
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
het probleem is dat je voertuigen gaat ophalen waarvan accessoire.accessoire maar 1 waarde kan zijn. Maar je wilt het wel vergelijken met 2 verschillende waardes.

Je werkt best met een IN statement in je join:

  1. SELECT DISTINCT * FROM voertuig JOIN accessoire ON voertuig.voertuignr_hexon = accessoire.voertuignr_hexon AND accessoire.accessoire IN ('anti blokkeer systeem', 'Airconditioning')

Offline JLT - 02/11/2011 11:36
Avatar van JLT PHP interesse Ha Ontani,

Dat is een mooie query en werkt goed op één belangrijk ding na. Ik wil alleen resultaten hebbe van auto's die beide opties hebben en dus niet of airco of ABS

Is dat ook mogelijk met jou query??
Offline Ontani - 02/11/2011 12:02
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Door je database design ga je dit niet in 1 query kunnen gieten (lijkt me).
Offline JLT - 02/11/2011 12:17
Avatar van JLT PHP interesse Wat zou een oplossing kunnen zijn... Structuur aanpassen, maar hoe dan?
Offline Ontani - 02/11/2011 12:53
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Eventueel kan het met volgende statement:

  1. select voertuig.* from voertuig
  2. inner join accessoire a on voertuig .voertuignr_hexon = a.voertuignr_hexon and a.accessoire = 'ABS'
  3. inner join accessoire b on voertuig .voertuignr_hexon = b.voertuignr_hexon and b.accessoire = 'Airco'


Maar echt ideaal is het niet.
Offline JLT - 08/11/2011 12:01
Avatar van JLT PHP interesse Iedereen hartstikke bedankt voor de moeite en hulp. Omdat ik er niet uit kwam met de queries heb ik het gedaan met (in mijn ogen) complexe array's. Ik moet wel zeggen dat het snel werkt en voorlopig hou ik het even zo. Misschien dat ik in de toekomst de database structuur aanpas en het alsnog oplos met de queries.

In ieder geval bedankt allemaal!
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.252s