Ik loop een beetje tegen een vreemd probleem aan en vroeg me af of iemand al hetzelfde probleem heeft gehad:
Ik heb een tabel waarin informatie staat over een inschrijving van een deelnemer aan een festival. Deze tabel heeft ook een veld `tags` waar gebruikers comma-gescheiden tags over zichzelf kunnen invoeren. Deze tags staan gewoon als tekst in de database (in hetzelfde veld en nee dat was niet mijn keuze):
Omdat er relatief weinig records zijn en ik de 50% treshold van FULLTEXT search om die reden niet wil gebruiken heb ik besloten om met een eenvoudige like te zoeken in het veld `tags`:
De database heeft trouwens een encoding van UTF-8 en is ingesteld op de CI (case insensitive) mode:
Nu voer ik de twee volgende queries uit:
Waarbij ik slechts bij de 2e query resultaat krijg, bij de eerste query return er helemaal niets, tenzij ik deze in PHPMYADMIN uit voer. Dan geven beiden queries hetzelfde en ook gewenste resultaat.
Een stukje relevante code:
Zie ik iets heel eenvoudigs over het hoofd?
Ik heb een tabel waarin informatie staat over een inschrijving van een deelnemer aan een festival. Deze tabel heeft ook een veld `tags` waar gebruikers comma-gescheiden tags over zichzelf kunnen invoeren. Deze tags staan gewoon als tekst in de database (in hetzelfde veld en nee dat was niet mijn keuze):
Omdat er relatief weinig records zijn en ik de 50% treshold van FULLTEXT search om die reden niet wil gebruiken heb ik besloten om met een eenvoudige like te zoeken in het veld `tags`:
De database heeft trouwens een encoding van UTF-8 en is ingesteld op de CI (case insensitive) mode:
Nu voer ik de twee volgende queries uit:
SQL:
1
| SELECT subscription_id, naam, confirmed, websites, tags, picture FROM `subscriptions` WHERE tags like '%test%' LIMIT 0, 10 |
SQL:
1
| SELECT subscription_id, naam, confirmed, websites, tags, picture FROM `subscriptions` WHERE tags like '%Test%' LIMIT 0, 10 |
Waarbij ik slechts bij de 2e query resultaat krijg, bij de eerste query return er helemaal niets, tenzij ik deze in PHPMYADMIN uit voer. Dan geven beiden queries hetzelfde en ook gewenste resultaat.
Een stukje relevante code:
PHP:
1
2
3
4
5
6
| $tag = addslashes(urldecode($_GET['tag'])); $total = db_query(sprintf("SELECT COUNT(subscription_id) AS `total` FROM `subscriptions` WHERE tags LIKE '%%%s%%'", $tag)); $total = db_fetch_array($total); $total = $total['total']; if ($start > $total) { $start = 0; } $sql = sprintf("SELECT subscription_id, naam, confirmed, websites, tags, picture FROM `subscriptions` WHERE tags LIKE '%%%s%%' LIMIT %d, %d", $tag, $start, $perpage); |
Zie ik iets heel eenvoudigs over het hoofd?
[ Voor 4% gewijzigd door Helmet op 13-04-2009 23:15 ]
Icons are overrated