[SQL] sorteren numriek met letter ervoor

Pagina: 1
Acties:
  • 105 views sinds 30-01-2008
  • Reageer

  • eatualive
  • Registratie: Juni 2005
  • Laatst online: 16:27
ik heb het probleem dat hij niet helemaal 100% wil sorteren hoe ik het wil.

PHP:
1
$query1 = "SELECT * FROM kabels WHERE merk='Siemens' ORDER BY kabel_nr ASC";


Deze query heb ik en die werkt perfect maar omdat de de kabel nummers met een S beginnen krijg ik het volgende probleem.
S1
S10
S2

Zoals je ziet zet hij de 10 boven de 2 omdat hij het niet al numeriek sorteert omdat de letter ervoor staat. Je kan dit natuurlijk omzeilen om met 2 tabellen te werken maar het zal vast wel korter kunnen met een simpele code achter ASCending.

Weet iemand hoe ik dit het makkelijkst op kan lossen?

  • Technicality
  • Registratie: Juni 2004
  • Laatst online: 19-10-2025

Technicality

Vliegt rechtsom...

Als het niet zoveel kabels zijn zou je het met PHP (substr() ) kunnen doen. Kan vast in ASP en perl ook wel.

  • eatualive
  • Registratie: Juni 2005
  • Laatst online: 16:27
Het gaat in iedergeval om veel kabels meer dan een paar honderd uiteindelijk

Verwijderd

Als er altijd 1 letter voor staat kan je met substr() die eerste letter er af halen en dan met php/asp/whatever de boel opnieuw sorteren. Ben bang dat het met sql alleen niet gaat lukken. Of je moet alle typenrs opnieuw invoeren (S1 -> S00001, S10 -> S00010, etc). Das overigens met een beetje scripten ook wel te regelen.

[ Voor 3% gewijzigd door Verwijderd op 19-04-2006 10:45 ]


  • Technicality
  • Registratie: Juni 2004
  • Laatst online: 19-10-2025

Technicality

Vliegt rechtsom...

Maar als je maar een paar letters hebt, en ze staan ook nog allemaal ervoorr (volgens mij waren het merken?) kun je ze dan niet apart in de DB opslaan? dat je gewoon een typenummer als int houd? Want dan kun je natuurlijk wel ORDER BY gebruiken. Er zat volgens mij niet iets als een substr() in SQL, dus je moet zowieso óf met je serverside taal moeten werken óf je DB aanpassen.

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Volgens mij kent ieder zichzelf respecterend DBMS, én MySQL (:P) een substring-achtige functie.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • eatualive
  • Registratie: Juni 2005
  • Laatst online: 16:27
aja je bedoelt dat ik van het S10 nummer de S weg haal dat opsla als er een kabel bij komt in een aparte tabel en kan ik daar op sorteren. Ik denk dat dat de beste oplossing is. Ik zal het eens uit proberen.

Alvast bedankt

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

er zit wel een SubString functie in mssql:
SUBSTRING
Returns part of a character, binary, text, or image expression. For more information about the valid Microsoft® SQL Server™ data types that can be used with this function, see Data Types.
en in mysql ook

Verwijderd

Hmm, toch es wat vaker in die manual kijken dus :X

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 17:06

Gonadan

Admin Beeld & Geluid, Harde Waren
Beginnen alle kabelnummers met een S?
Dan zou ik die S gewoon uit de database flikkeren.
En zo niet, dan kan je S misschien als een typeaanduiding beschouwen.
En dat hoort vanwege redundantie dan in een aparte tabel met een FK van het kabelnummer naar het type :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • UniCache2
  • Registratie: Januari 2001
  • Laatst online: 09-01 09:09
<?
$query1 = "SELECT * FROM kabels WHERE merk='Siemens' AND SUBSTRING(kabel_nr,1,1) = 'S' ORDER BY SUBSTRING(kabel_nr,2) ASC";
?>

  • eatualive
  • Registratie: Juni 2005
  • Laatst online: 16:27
UniCache2 schreef op woensdag 19 april 2006 @ 11:07:
<?
$query1 = "SELECT * FROM kabels WHERE merk='Siemens' AND SUBSTRING(kabel_nr,1,1) = 'S' ORDER BY SUBSTRING(kabel_nr,2) ASC";
?>
Deze hierboven werk neit 100% want hij doet het volgende:
S1
S10
S2
S20
Die met die tabel en losse kabel nummer werkt wel perfect. Dus eigelijk ben ik er al uit.

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 17:06

Gonadan

Admin Beeld & Geluid, Harde Waren
eatualive schreef op woensdag 19 april 2006 @ 11:11:
[...]


Deze hierboven werk neit 100% want hij doet het volgende:
Dat komt omdat hij hem nog steeds als string sorteert (subSTRING)
En dus niet numeriek :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

en daar hebben ze weer cast c.q. convert voor uitgevonden :)

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 13:40
Even casten naar een int dus

Roomba E5 te koop

Pagina: 1