2015-04-08 9 views
0

Я пытаюсь заказать строку на основе значений, которые находятся в разных столбцах, я честно не знаю, как объяснить это правильно, поэтому я покажу пример.Запрос MySQL на основе значения столбца

Я пытаюсь создать запрос, который упорядочивает Неудачи на основе значения, например SELECT * from table WHERE id='1' order by Failure1 asc,Failure2 asc,Failure3 asc

Я хочу запрос, чтобы показать это в результате.

ID Failure2 Failure3 Failure1 
1  5636  123  22 

Пример таблицы

ID Failure1 Failure2 Failure3 
1  22  5636  123 
2  33  148  22 
3  1  101  11 
4  33  959  55 
+1

Вы не можете динамически переустанавливать столбцы. Я мог бы написать запрос, который переупорядочил значения в столбцах * (такие, что 'Failure1 = 5636, Failure2 = 123, Failure3 = 22') *. Но даже тогда я задал вопрос: «Почему ты хочешь это сделать? Это похоже на то, что вы должны делать в своем слое презентации. – MatBailie

+0

Хммм, я вижу, я не знаю, как я могу подключить разные ошибки к определенному идентификатору, не следуя этой структуре. - По слою представления вы имеете в виду, что это делает его front-end, сортируя его и т. Д.? – Hashey100

+0

Да, независимо от того, какой внешний интерфейс у вас должен иметь возможность принимать результаты, как они существуют в вашей таблице * (Column1 = ID, Column2 = Failure1, Column3 = Failure2 и т. Д.) *, А затем сортировать их по мере необходимости для презентации. – MatBailie

ответ

1

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

SELECT 
    CASE 
    WHEN (Failure1 > Failure2 AND Failure1 > Failure3) THEN Failure1 
    WHEN (Failure2 > Failure1 AND Failure2 > Failure3) THEN Failure2 
    WHEN (Failure3 > Failure1 AND Failure3 > Failure2) THEN Failure3 
    END, 
    --repeat Case for second and third column 
FROM 
    Failures 
WHERE 
    ID = 1 

Кроме того, дважды проверьте, что вы можете сделать и логику в WHEN(). 90% уверены, что вы можете, но в худшем случае вам нужно расширить свои КОГДА.

Также @MatBailie прав; это обычно делается на уровне презентации, а не через SQL-запросы. SQL на самом деле не лучший в такой логике, тогда как для него построен слой представления.

+0

также комментарий '--repeat Case для второго и третьего столбцов' не является технически корректным; логика будет отличаться для определения вашего среднего и самого низкого значения. Это должно вас завести, но –

+0

Вы пропустили ключевой момент; OP требует, чтобы столбцы * Имена * перемещались, а также значения в этих столбцах. – MatBailie

+0

В этом случае, я согласен с тобой Мат, это практически невозможно. Грязный взлом должен был добавить идентификатор к результату, возвращаемому оператором case: 'THEN Failure1 + 'F1'' ' THEN Failure2 +' F2'' Теперь это, очевидно, добавляет целый лишний уровень проблем, потому что вам нужно чтобы скрыть идентификатор, возможно, запустил Failure1/Failure2 в varchar() перед добавлением и т. д., но это единственный способ, с помощью которого я могу даже отдаленно выполнить то, что хочет OP. –

Смежные вопросы