Ik wil een zoekopdracht uitvoeren die zoekt op kleine en hoofdletters en nummers gemengd door elkaar heen. Bv. als je 'z1AfJ90z100826' of 'a1AfJ90Z100826' als zoekopdracht verzend en in de de database staat 'S1AfJ90Z100826' dan krijg ik geen resultaat maar alleen als ik op 'S1AfJ90Z100826' zoek
Ik heb dit staan:
<?
$SQL="select * from inkoopfactuurdetails where ";
$SQL=$SQL."productserienr = '".$snr."' or productserienr = '".$snr2."'";
?>
maar ook dit geprobeerd uit phpmyadmin wat werkt als ik daar zoek maar niet als ik het in mijn script doet
<?
$SQL = 'SELECT * FROM `inkoopfactuurdetails` WHERE `productserienr` LIKE CONVERT(_utf8 '".$snr."' USING latin1) COLLATE latin1_swedish_ci';
Ook dat werkt want tijdens de zoekactie worden de letters -ure- aan beide kanten ge-uppercased en vind je dus serienummer Jure3867. In de functie upper() worden dus de lowercase letters tijdens zoeken ge-uppercased en de andere upper case letters en de cijfers hebben er geen last van! Dit is jarenlang de oplossing geweest in antieke SQL. In zeer grote tabellen heb ik ook wel een extra kolom gemaakt waar de bewuste string ernaast geheel in upper case werd geplaatst om vervolgens daarop een index te maken. Helaas ondersteunt MySQL de function based index niet maar ik ga er van uit dat het zonder index ook niet te lang duurt.
[edit]
wat is geen goed resultaat ??
Helemaal niks ? En als je exact invult wel resultaat ?
Vreemd hoor, ik heb in de vorige reactie aangetoond dat het kan.
[edit]
wat is geen goed resultaat ??
Helemaal niks ? En als je exact invult wel resultaat ?
Vreemd hoor, ik heb in de vorige reactie aangetoond dat het kan.
Precies zoals je het zegt, als ik het exact invult krijg ik wel een goede resultaat? Een letter verschil niet nl Jure95911 staat in de database zoek ik JURE95911 of JuRe95911 ens dan vindt hij niets
Maar dat klopt, want MySQL doet het nu goed maar de vergelijking in de While gaat mis omdat je daar dan weer upper en lower case door elkaar gaat vergelijken.
Haal dit eruit: $zoekresultaten["productserienr"]===$snr
Waarom zit dit erin, je herhaalt hier je WHERE clausule van je query en je gaat nog een keer vergelijken..... Onnodig. Gewoon echo'en wat je gevonden hebt!
Die while zit er in omdat er meerdere resultaten kan zijn en dan moeten ze allemaal onder elkaar weergegeven worden. Kan ik niet die UPPER op een of ander manier in de while vergelijking zetten?
dat moet je dan weer met php doen en strtoupper() gebruiken.
overigens, wat heeft onder elkaar weegeven te maken met while ($zoekresultaten["productserienr"]===$snr) ???
Hier gaat mijn begrip toch wel even mis.
[edit]
($zoekresultaten["productserienr"]===$snr) is immers altijd true omdat je dezelfde vergelijking al in MYSQL gebruikt hebt. Het is echt niet nodig.
Het laat een lijst met facturen zien waar die serienummer op staat dus zolang de zoekresultaat gelijk is aan de serienummer worden ze op het scherm weergegeven het werkte altijd wel zo tot het probleem met de kleine en grote letters.
[size=xsmall]Toevoeging op 06/08/2010 21:56:47:[/size]
Je hebt gelijk als ik de while weg haal dan werkt de UPPER maar dan krijg ik alleen de eerste factuur en niet de andere :S
[size=xsmall]Toevoeging op 06/08/2010 22:04:32:[/size]
Ik heb het idd hiermee opgelost, ik kan je niet genoeg bedanken, nu kan ik eindelijk naar huis :))
<?
while (strtoupper($zoekresultaten["productserienr"])===strtoupper($snr))
?>
Weet je ook hoe om een spatie aan het eind weg te halen, deze probleem heb ik vaak als ik een serienummer knip en plakt
nu dus nog even de while verbeteren, check het voorbeeld van 21:21:12 zorg dus dat het een loopje wordt zolang er records zijn. while($user =mysql_fetch_assoc($result)
of zoek een ander voorbeeld met while en mysql_fetch_assoc(
[edit]
spaties eraf met $text=trim($text);
Eindelijk naar huis? Prettig weekend dan.
Ik ben ook aan het werk maar gelukkig thuis via vpn.
Maarre die while nog wel een keer aanpassen hoor want 2x vergelijken blijft teveel van het goede!!