Avatar billede sesam Nybegynder
25. juni 2008 - 14:50 Der er 6 kommentarer og
1 løsning

Hvilket tal er højest

Hej Exp,
Jeg har et problem med en produktdatabase.
Når man opretter et nyt produkt tildeles dette et varenummer automatisk.

fx:
1_2
1_4
2_2
2_4
osv...


Mit problem er at fx. 2_2 vægtes højere end 10_2 så jeg kan ikke få fat i det højeste vare nummer med følgende forespørgsel:

SELECT MAX(products_item_num) AS maxid FROM tbl_products

Hvordan kan det være at 2_2 vægtes højere end 10_2?

Hvad gør jeg???
Avatar billede pidgeot Nybegynder
25. juni 2008 - 14:56 #1
Dit varenummer er ikke numerisk (INT, BIGINT, m.v.), men alfanumerisk (defineret som VARCHAR). Derfor bliver det hele sorteret som tekst, altså et tegn af gangen - og 2 er jo større end 1.

CAST kunne være en mulighed, evt.  kombineret med SUBSTRING eller REPLACE, men det vil selvfølgelig være bedst hvis du kan skifte til en rent numerisk form (og selvfølgelig også tilsvarende datatype), så databasen ikke skal bruge kræfter på at konvertere hver gang.
Avatar billede sesam Nybegynder
25. juni 2008 - 15:08 #2
Hvis jeg skifter fx. INT kan jeg jo ikke ha min _ som et del af varenummert.

Kan du lave et eksempel med CAST, jeg har aldrig hørt om det før?
Avatar billede pidgeot Nybegynder
25. juni 2008 - 15:12 #3
Nej, det ved jeg godt - men du kunne jo så overveje en varenummerstruktur der ikke havde det, eller måske på anden måde kunne have et "varenummer til sortering". Jeg ved ikke umiddelbart nok om din varenummerstruktur til at kunne være mere konkret på det punkt.

Dokumentationen er nok bedst til at forklare CAST: http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html

Et andet alternativ kunne i øvrigt være at foranstille 0'er, men så skal du selvfølgelig vide hvor mange 0'er du får brug for.
Avatar billede erikjacobsen Ekspert
25. juni 2008 - 15:28 #4
Du kan sikkert lave det med to ekstra rækker

Dit varenummer som du har nu CHAR/VARCHAR: "2_4"
Et nyt felt, INT: 2
Et nyt felt, INT: 4

Så kan du udskrive fra det ene, og sortere efter de to andre.
Avatar billede sesam Nybegynder
25. juni 2008 - 17:27 #5
Takker for alle jeres forslag... :O)

Da 1_2 & 1_6 er en varegruppe, har jeg tilføjet et gruppe id, jeg kan så den vej få den højeste værdi...

Smid begge venligst et svar...
Avatar billede erikjacobsen Ekspert
25. juni 2008 - 17:35 #6
Ingen point til mig, tak.
Avatar billede pidgeot Nybegynder
25. juni 2008 - 17:54 #7
Værsgo :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester