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.
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.
dit komt denk ik door de lege velden.
Dat klopt.
WHERE .... X LIKE %% OR ... WHATEVER
is hetzelfde als
WHERE TRUE
Je zult je query dynamisch moeten opbouwen, en alleen een LIKE-stuk toevoegen als je zoekterm niet leeg is. En als alle zoektermen leeg zijn dan krijg je inderdaad alles te zien.
Thomas zijn suggestie over dynamisch opbouwen van de query is natuurlijk juist.
Of je OR of AND moet gebruiken hangt af van wat jij wilt.
Stel je vult username en mail adres in, welke resultaten wil je dan zien. Moeten ze allebei kloppen, dan gebruik je AND, moet 1 van de twee kloppen (of username of mail adres), dan gebruik je OR.
ok dus als ik het goed begrijp moet ik dus een LIKE en een BETWEEN gebruiken?
zonder BETWEEN kan ik anders niet de tussenliggende datums me geven toch?
ik heb nu dit :
<?
$zoekwoord4 = $_POST['zoekwoord4'];
$zoekwoord5 = $_POST['zoekwoord5'];
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$query = "SELECT id, user_name, birthday, TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age FROM users WHERE
(`id` LIKE '%".mysql_real_escape_string($_POST['zoekwoord'])."%' )
AND (`user_name` LIKE '%".mysql_real_escape_string($_POST['zoekwoord1'])."%' )
AND (`country` LIKE '%".mysql_real_escape_string($_POST['zoekwoord2'])."%' )
AND (`birthday` BETWEEN DATE( DATE_SUB( NOW() , INTERVAL '$zoekwoord5' + 1 YEAR ) ) AND DATE( DATE_SUB( NOW() , INTERVAL '$zoekwoord4' YEAR ) )) ";
?>
moet dit dan zo iets worden??
<?
AND (`birthday` LIKE '%" BETWEEN DATE( DATE_SUB( NOW() , INTERVAL '$zoekwoord5' + 1 YEAR ) ) AND DATE( DATE_SUB( NOW() , INTERVAL '$zoekwoord4' YEAR ) )"%') ";
?>