ik heb weer een vraagje.
ik ben op zoek naar een manier om mijn database uit te lezen dermate van zoek kriteria.
nu heb ik 1 input veld en dit werpt top!
full textsearch heb ik ook naar gekeken maar naar zo iets ben ik niet op zoek.
ik wil dus bijvoorbeeld 3 input velden onder elkaar :
1 voor zoeken op username
2 voor zoeken op id
3 voor zoeken op mail adres
nu heb ik bij de input name verschillende namen gemaakt dus bv.
zoek1
zoek2
zoek3
en bij mijn query heb ik dit ingevuld :
$query = "SELECT * FROM `user` WHERE (`username` LIKE '%".$zoek1."%' OR `id` LIKE '%".$zoek2."%'OR `usermail` LIKE '%".$zoek3."%'";
maar als ik nu 3 zoekvelden heb maakt het niet uit wat ik invul maar ik krijg altijd alle gegevens te zien uit de database.
hierbij wil ik dus kunnen zoeken tussen 2 data (BETWEEN)
dus in mensen taal staat er volgens mij in de code
zoek bij 'birthday' tussen datum (nu) en interval $zoekwoord5 (dus bijvoorbeeld 11) zoek alleen Jaartal en tussen datum (nu) en interval $zoekwoord4 (bijvoorbeeld 15) zoek alleen jaartal
dus dan zou hij moeten zoeken alle users die tussen de 11 en 15 jaar zijn.
het eerste voorbeeld werkt prima alleen dan werkt alleen dus de BETWEEN zoekfunctie en niet de losse zoekfuncties.
als ik de BETWEEN regel weg haal dan werken de andere zoekfuncties weer.
In het WHERE-deel van een query leg je extra condities (voorwaarden) op die aangeven waar de gegevens die je ophaalt aan moeten voldoen.
Je kunt meerdere condities opgeven, en deze worden meestal verbonden met AND of OR.
De manier waarop je condities aan elkaar hangt bepaalt welke voorwaarden er moeten gelden.
Stel dat A, B en C (verschillende) condities zijn.
Als je WHERE-deel er als volgt uitziet:
A AND B
Dan houdt dit in dat de opgehaalde gegevens zowel aan A als aan B moeten voldoen (A èn B).
Als je WHERE-deel er als volgt uitziet:
A AND B AND C
Dan houdt dit in dat de opgehaalde gegevens aan alledrie moeten voldoen (A èn B èn C).
Als je daarintegen OR gebruikt zijn de "eisen" wat losser:
A OR B
Houdt in dat er ofwel aan A of aan B moet zijn voldaan (of aan beide, dat is ook goed).
A OR B OR C
Hoeft er zelfs maar aan 1 van de 3 criteria voldaan te zijn of 2 uit 3, of alledrie, dat levert in al die gevallen resultaten op (maar waarschijnlijk niet dezelfde).
Als je AND en OR gaat combineren dan heeft een van de twee "voorrang" (net zoals bij rekenen: machtsverheffen komt voor vermenigvuldigen komt voor delen etc.) maar naar mijn mening kun je beter expliciet zijn in wat je bedoelt:
(A AND B) OR C
levert namelijk hele andere resultaten op dan:
A AND (B OR C)
Simpelweg omdat de haakjes die aangeven welke condities met elkaar geassocieerd zouden moeten worden op een andere plaats staan.
Zoals Jan voorstelt: probeer te verwoorden wat je probeert te bereiken, en probeer dat met bovenstaand verhaal om te zetten in een query, of geef aan wat je probeert te bereiken als dit niet lukt.
Wat er in feite gebeurt: Je pakt het verschil in jaren, en corrigeert dit verschil als de verjaardag nog niet geweest is door er nog een extra jaar vanaf te trekken. Hierbij wordt een beetje misbruik gemaakt van hoe er omgegaan wordt met typen, zoals ook in dat bericht staat.
Als je voor date1 NOW() invult en voor date2 de kolomnaam van de geboortedatum dan is dat je leeftijdsberekening.
Thomas ik heb het geprobeerd met OR maar als ik deze toevoeg dan laat hij altijd alles zien (dus geen selectie)
ik denk dat hij dan ook de lege velden mee rekend van de andere zoek criteria.
die timestamp van Ger ziet er ook logisch uit.
als ik dit in mijn script wil toepassen dan heb ik dit geprobeerd maar dit werkt niet.
<?
AND (`birthday` TIMESTAMPDIFF(YEAR, birth_date, CURRENT_DATE) BETWEEN '$zoekwoord5' AND '$zoekwoord4')
?>