English 中文(简体)
Sorting by unknown column type in mysql
原标题:

So I ve got a users table; storing things like username, email, etc. I then have a user_settings table. Instead of standard columns like timestamp_logged_in, profile_views, etc., I have it organized as key/value combo. For example, the columns are:

user_settings_ID user_ID name value

A sample record would be: 82 2 timestamp_logged_in 2009-10-10 02:23:53

This makes the settings a little more permeable. I don t need to have a column exist to store new user setting types. I m concerned that doing this (which will store every value as a string, and I ll cast it to the appropriate type in the middle ware) will make it difficult to sort. So for example if I wanted to get a list of the users in order of last logged in, sorting would require an sql call such as:

SELECT user_ID FROM user.settings WHERE status= open AND name= timestamp_logged_in ORDER BY name

This would be sorting the found records as strings, however. Is there a way to make sure the sorting algorithm mysql is implemented based on a certain value type (eg. forcing it to treat the sort column as a string, integer, datetime, timestamp, etc.)?

Any thoughts would really be appreciated. Thanks. Oliver Nassar

问题回答

You would have to manually cast it to the correct data type.

If you expect the table to get large, storing as key-value pairs like this, while it seems like a good idea at the start, invariably ends up with really crappy performance, as you can t create useful indexes. Think about it now instead of changing later.

Why not store the data in a "sortable" string representation .. "pre-casting to a sortable format"

instead of 11-28-2009 11:45 you could store it as 2009.11.28 11:45

MySQL has the functions needed to typecast back to "datetime" or "date" in the "middleware".





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签