php forum
php mysql forum
php mysql smarty
 
Topic Options
#312648 - 01/12/07 10:20 AM MySQL query sorting
Myke Offline
Power User

Registered: 09/06/99
Posts: 97
Loc: Sydney, Australia
I've got a field in a table of type VARCHAR(8). The various values contained in this field include positive and negative numbers, and plain text.

When I run a query, sorting on this field, it doesn't appear to sort correctly. In my ORDER BY I'm type casting this field as follows:

ORDER BY cast(MyField as signed)

Now, if the following values are found in this field all throughout my table:

6, 3, down, slam, stgr, 0, -3

and the query is run, I get something like:

6
3
down
slam
stgr
down
0
-3

I have no idea why this sorts weirdly. I mean, even multiple instances of the same text values (like "down") aren't even appearing together.

The only thing that I find suspicious is that the Collation for this field (and all fields actually) is latin1_swedish_ci, but when I tried changing it to something like utf8_general_ci, it makes no difference.

To see this live, check out: http://virtuafighter.com/commands/index.php?chara=akira&ver=5b&order=mc&sort=desc

It's basically a command list for a video game. Clicking on the column headings sorts on that column. If you click on the "MC" column, you'll see exactly what I mean with the weird results. Sorting on the "Dmg" column seems fine, however. This field is of the same type, but does not include any text values.

Any clues on how I can sort a field with a mixture of positive and negative numbers, and text, would be appreciated.

Top
#312652 - 01/12/07 08:18 PM Re: MySQL query sorting [Re: Myke]
Ian Spence Offline
Master Hacker

Registered: 01/25/03
Posts: 3765
Loc: Saint Johns, PA
when you cast strings to integers, they are cast to 0 if they aren't numeric.

So your actual results with sorting were

6
3
0
0
0
0
0
-3


Stop casting them to integers and you should be good to go

Top
#312655 - 01/12/07 09:43 PM Re: MySQL query sorting [Re: Ian Spence]
Myke Offline
Power User

Registered: 09/06/99
Posts: 97
Loc: Sydney, Australia
Thanks for the explanation.

If I don't cast, then, as an example, the number values will sort like this:

1
10
11
2
20
22

instead of:

1
2
10
11
20
22

Is there a way to correctly sort a VARCHAR field containing positive numbers, negative numbers and plain text?


Edited by Myke (01/12/07 09:46 PM)

Top
#312659 - 01/13/07 12:50 AM Re: MySQL query sorting [Re: Myke]
Myke Offline
Power User

Registered: 09/06/99
Posts: 97
Loc: Sydney, Australia
Found a solution to work.

I ended up using a CASE statement in my SELECT query to assign numerical values to my strings. It basically goes:

SELECT * FROM MyTable
ORDER BY
CASE MyField
WHEN 'string1' THEN 100
WHEN 'string2' THEN 200
and so on...
ELSE cast(MyField as signed)
END

Cheers.

Top



Latest Posts
[7.2.1] - Naked shoutbox
by bellaonline
05/05/12 05:00 PM
[7.x] Stop Forum Spam Integration v0.4
by bellaonline
05/05/12 03:53 PM
Shout Box

(Views)Popular Topics
Known public proxy servers 1689885
Integrated Index Page (IIP) 5.3.1 555705
Finished-[6.5.2] Games Arcade Deluxe v1.9 501236
Integrated Index Page (IIP) 5.1.1 415112
TLD Bv2.1 Released - Threads Links Directory 396822
[6.0x] Who's Online 4.0.0 [Finished] 389412
Finished-[6.5.1] Integrated Index Page (IIP) 6.5 330423
Q & A 298663
Slash UBB 266936
[6.3.x] [beta] Hit Hack 2.0 227970
Forum Stats
13621 Members
59 Forums
37191 Topics
295716 Posts

Max Online: 686 @ 06/28/07 07:04 AM

 

 

 
fusionbb message board php hacks