Привет.
Есть база MySQL, есть таблица и в ней целочисленное поле, в котором могут находиться значения 0..2, необходимо извлечь данные из этой таблицы по запросу, отсортировав записи по этому полю, при этом значения 0 и 1 должны при сортировке считаться идентичными, это как-то возможно сделать? Что-то не соображу никак. Понимаю, что это, вероятно, косяк проектирования, но такая уж база, какие есть варианты? Подойдёт любой workaround, желательно, конечно, без изменения структуры и данных.
Спасибо.
Здравствуйте, x64, Вы писали:
x64> Есть база MySQL, есть таблица и в ней целочисленное поле, в котором могут находиться значения 0..2, необходимо извлечь данные из этой таблицы по запросу, отсортировав записи по этому полю, при этом значения 0 и 1 должны при сортировке считаться идентичными, это как-то возможно сделать? Что-то не соображу никак. Понимаю, что это, вероятно, косяк проектирования, но такая уж база, какие есть варианты? Подойдёт любой workaround, желательно, конечно, без изменения структуры и данных.
Если решать задачу именно в указанной постановке, то простая сортировка по данному полю и даст нужный результат без к-л дополнительных манипуляций, т.к. последовательность сортируется в 0-1-2 (т.е. 0 и 1 всегда будут идти раньше 2 даже если мы 1 заменим на 0 или 0 на 1).
Однако, если перефразировать условие, скажем, считать 2 идентично 0, то можно попробовать что-то типа такого:
CREATE DATABASE `test`;
USE `test`;
CREATE TABLE `test` (
`id` INTEGER NOT NULL,
`value` TEXT NOT NULL
);
INSERT INTO `test` VALUES
(0, 'ноль-1'), (1, 'один-1'), (2, 'два-1'),
(2, 'два-2'), (0, 'ноль-2'), (1, 'один-2'),
(1, 'один-3'), (2, 'два-3'), (0, 'ноль-3');
SELECT
IF(`id` = 2, 0, `id`) AS `id`,
`value`
FROM
`test`
ORDER BY
`id`;
Если условий много, то можно IF заменить на
CASE