MySQL IF Statement меняет значение на лету? - PullRequest
3 голосов
/ 10 января 2012

Я даже не уверен, что это вполне возможно сделать с MySQL, но я надеюсь, что это так.

ОК, поэтому у меня есть эта команда SQL

SELECT * FROM table WHERE $WhereCondition ORDER BY ListStyle

В качестве примера данных в ListStyle я мог бы иметь

2000 3000 3700 3800

То, что я надеюсь сделать, это использовать какой-то оператор if в SQL, который позволит мне проверять другие поля в строке результатов, чтобы я мог изменить значение ListStyle, прежде чем использовать его на странице для закажите соответственно.

Так, например, у меня есть поля a, b и c. Теперь, если a и b НЕ пустые, а c = 100 и ListStyle = 3700, я хочу изменить значение ListStyle на 3699, чтобы при выводе цикла результатов отображались строки, соответствующие условию ( a != '', b != '', c = 100 and ListStyle = 3700) над строками, которые имеют ListStyle 3700

Я не могу просто отредактировать данные в базе данных, хотя это было бы простым решением. Данные должны оставаться как есть.

Первоначально я пытался сделать это в php. Хотя изменить значение ListStyle с помощью операторов if достаточно просто, я не знаю простого способа упорядочить результаты, не помещая их в массив и не сортируя его. Я действительно не хочу этого делать, поскольку это будет означать переписывание большого количества кода, поэтому я надеюсь, что это все возможно сделать в MySQL.

Может кто-нибудь помочь с этим?

Ответы [ 4 ]

3 голосов
/ 10 января 2012

попробуйте что-то вроде:

SELECT * FROM table_name WHERE $WhereCondition ORDER BY CASE 
        WHEN ( a = 0, b = 0, c = 100 and ListStyle = 3700)  THEN 1
        WHEN ( a = 10, b = 20, c = 200 and ListStyle = 3400) THEN 2
        ELSE 10
    END
0 голосов
/ 10 января 2012

Как насчет этого?

SELECT a,b,c, IF($condition, 3700, 3699) AS order WHERE $whereCondition ORDER BY order

Выражение $ condition в MySQL может быть утомительным, но я думаю, что это возможно.

0 голосов
/ 10 января 2012

Вы можете использовать IF или CASE внутри оператора ORDER BY, например

...
ORDER BY
  IF(condition1, then_value, else_value)
0 голосов
/ 10 января 2012

Вы можете использовать триггеры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...