Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SQL] Sorteren hoofdletter ongevoelig

Pagina: 1
Acties:

  • Bananenspin
  • Registratie: December 2008
  • Laatst online: 20-11 16:27

Bananenspin

Omdat het kan

Topicstarter
SQL:
1
SELECT user_id, username FROM gca_users WHERE group_id != 6 AND user_id != 1 '.$sortby.'ORDER BY username LIMIT 40


PHP:
1
2
3
4
5
6
$alphabet = array('0-9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');

if (isset($_GET['id']) && in_array($_GET['id'], $alphabet)) {

        $sortby = 'AND username LIKE \''.$_GET['id'].'%\' ';
    }


Deze query met klein stukje bijbehorende php code zorgt ervoor dat www.website.nl/leden/e/ een overzicht laat zien van alle leden die beginnen met een e. Probleem is dat alleen de leden met een e terug komen en niet met een E. De collatie van de tabel is utf8_bin, heb dit al geprobeerd te veranderen naar utf8_general_ci maar dit mocht ook niet baten. Hoogwaarschijnlijk is er een onwijs makkelijke oplossing maar die zie ik over het hoofd..

HOI.


  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 16:11

Acid_Burn

uhuh

Gewoon niet zo?
PHP:
1
 $sortby = 'AND lower(username) LIKE \''.$_GET['id'].'%\' ';

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 23-11 17:41

Skinny

DIRECT!

Hint : Je kunt ook proberen om te zorgen dat je in de LIKE bijvoorbeeld alleen maar hoofdletters of alleen maar kleine letters krijgt en daarmee de vergelijking dus hoofdletter ongevoelig maakt.

edit : too slow, hierboven geeft het antwoord dus al :-)

[ Voor 13% gewijzigd door Skinny op 08-04-2011 01:14 ]

SIZE does matter.
"You're go at throttle up!"


  • Bananenspin
  • Registratie: December 2008
  • Laatst online: 20-11 16:27

Bananenspin

Omdat het kan

Topicstarter
Acid_Burn schreef op vrijdag 08 april 2011 @ 01:14:
Gewoon niet zo?
PHP:
1
 $sortby = 'AND lower(username) LIKE \''.$_GET['id'].'%\' ';
Sorry had erbij moeten zeggen dat ik het had geprobeerd met upper inplaats van lower, alleen krijg je dan de hoofdletters eerst en daarna de kleine letters, dit haalt het nut van het alfabetiseren een beetje weg.

@Skinny
Jij bedoeld hetzelfde toch?

HOI.


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 17:06

Dido

heforshe

Ik zou die upper/lower niet in alleen in de LIKE clause zetten (daarmee zorg je dat Evertsen en eberhart beiden gevonden worden), maar ook in de ORDER BY clause (daarmee zorg je dat ze gelijk gesorteerd worden) ;)

Wat betekent mijn avatar?


  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 16:11

Acid_Burn

uhuh

tja dan moet je je orderby ook even aanpassen eh :P

order by lower(username)

edit: aargh.. ninja'd by dido :P

[ Voor 18% gewijzigd door Acid_Burn op 08-04-2011 01:32 ]

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 23-11 17:41

Skinny

DIRECT!

WHERE filtert alleen de data, je mist hier dus een ORDER BY statement die je naar gelang je wilt op 'username' of LOWER(username) doet.

[edit] double ninja-d, replyen op een smartphone blijft lastig.

[ Voor 20% gewijzigd door Skinny op 08-04-2011 01:34 ]

SIZE does matter.
"You're go at throttle up!"


  • Bananenspin
  • Registratie: December 2008
  • Laatst online: 20-11 16:27

Bananenspin

Omdat het kan

Topicstarter
Kijk zo simpel maar dus ook zo effectief, weer wat geleerd. Bedankt allen!

HOI.

Pagina: 1