[SQL] Resultset sorteren op lengte

Pagina: 1
Acties:

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Stel, ik haal de volgende besturingssystemen op uit een database:
code:
1
2
3
4
1 Windows NT 5.1
2 Windows
3 Windows 98 SE
4 Windows 98

Vervolgens wil ik de client useragent vergelijken met bovenstaande strings:
PHP:
1
2
3
4
5
6
$result = db_query("SELECT * FROM stats_tech WHERE type = 'os'");
while ($tech = db_fetch_object($result)) {
  if (strpos($_SERVER['HTTP_USER_AGENT'], $tech->value)) {
    return $tech->id;
  }
}

Het nadeel is, dat deze code returned zodra hij een match tegenkomt. Als in de resultset die uit de database terugkomt "Windows" voor "Windows 98 SE" staat, retourneert deze code als id 2 ipv 3 (aangenomen dat de client win 98 se draait). Om zulke fouten te voorkomen wil ik de resultset sorteren op naam en op lengte van de string, dus:
code:
1
2
3
4
1 Windows NT 5.1
3 Windows 98 SE
4 Windows 98
2 Windows

Op deze manier controleert php eerst op windows 98 se, dan op windows 98 en dan pas op windows. Ik kan de resultset eenvoudig in PHP sorteren op lengte van iedere string, maar vroeg mij af: kan dit ook in SQL? Ik heb gezocht op GoT, maar kwam alleen topics tegen die alfabetisch sorteren, maar niet op lengte van een string :)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • truegrit
  • Registratie: Augustus 2004
  • Laatst online: 16-02 15:05
volgens mij is er een soort van len() functie in mysql, misschien dat je daar op kan sorteren. ik weet niet of dat ook buiten mysql werkt.

hallo


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
SQL:
1
...order by length(myfield) desc

:?

http://dev.mysql.com/doc/refman/4.1/en/string-functions.html
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html


Persoonlijk vind ik het maar een rare manier om een OS te matchen ;)

[ Voor 83% gewijzigd door RobIII op 26-04-2006 18:03 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Op de een of andere manier vind ik dit niet echt de meest nette manier :)