Сортировка по неизвестному типу столбца в MySQL - PullRequest
1 голос
/ 28 ноября 2009

Итак, у меня есть таблица пользователей; хранение таких вещей, как имя пользователя, адрес электронной почты и т. д. Затем у меня есть таблица user_settings. Вместо стандартных столбцов, таких как timestamp_logged_in, profile_views и т. Д., Я организовал его как комбинацию ключ / значение. Например, столбцы:

user_settings_ID user_ID имя значение

Пример записи будет: 82 2 'timestamp_logged_in' '2009-10-10 02: 23: 53'

Это делает настройки немного более проницаемыми. Мне не нужно иметь столбец для хранения новых типов пользовательских настроек. Я обеспокоен тем, что выполнение этого (которое будет хранить каждое значение в виде строки, и я приведу его к соответствующему типу в промежуточном программном обеспечении) затруднит сортировку. Так, например, если бы я хотел получить список пользователей в порядке последнего входа в систему, для сортировки потребовался бы вызов SQL, такой как:

ВЫБЕРИТЕ user_ID ИЗ user.settings WHERE status = 'open' И name = 'timestamp_logged_in' ORDER BY name

Однако это будет сортировать найденные записи как строки. Есть ли способ убедиться, что алгоритм сортировки mysql реализован на основе определенного типа значения (например, принудительно обрабатывать столбец сортировки как строку, целое число, дату-время, метку времени и т. Д.)?

Любые мысли будут действительно оценены. Благодарю. Оливер Нассар

Ответы [ 2 ]

3 голосов
/ 28 ноября 2009

Вы должны вручную привести к правильному типу данных.

Если вы ожидаете, что таблица станет большой, сохраняя в виде пар ключ-значение, как это, хотя это кажется хорошей идеей с самого начала, неизменно получается очень дрянная производительность, поскольку вы не можете создавать полезные индексы. Подумайте об этом сейчас, а не меняйтесь позже.

0 голосов
/ 28 ноября 2009

Почему бы не сохранить данные в «сортируемом» строковом представлении .. «Предварительное приведение к сортируемому формату»

вместо '11 -28-2009 11:45 'вы можете сохранить его как' 2009.11.28 11:45 '

MySQL имеет функции, необходимые для повторного ввода типа «datetime» или «date» в «middleware».

...