Mysql выберите значение поля или его обратное (бис) - PullRequest
0 голосов
/ 24 марта 2012

Я хотел бы выбрать значение из таблицы базы данных или его обратное только с одним запросом SQL.

Я ранее опубликовал вопрос, но теперь у меня есть больше спецификаций, которые меняют проблему.

Мои поля таблицы: id, rate, from_value, to_value, date_modified

Это псевдокод, который я хотел бы сделать только с одним запросом:

SELECT `rate` if `from_value` = $from_value and `to_value` = $to_value

OR

SELECT (1/`rate`) if `from_value` = $to_value AND `to_value` = $from_value 

WHERE UNIX_TIMESTAMP('NOW()')-".$expirationTime." < UNIX_TIMESTAMP('`date_modified`'))

Я уверен, что одна из строк присутствует в таблице, поэтому я хотел бы вернуть только значение rate и значение null, только если предложение WHERE не реализовано. Я не хочу, чтобы он возвращал NULL для других строк (для которых не реализовано никаких условий). Спасибо

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Похоже, что простой CASE сделает свое дело:

select
    case
        when from_value = $from_value and to_value = $to_value   then rate
        when from_value = $to_value   and to_value = $from_value then 1 / rate
    end
...

Возможно, вы захотите ELSE на CASE, если ваше предложение WHERE не заставляет одну из ветвей CASE выполнитьmatch.

Если вам нужны только строки, соответствующие одной из ветвей в приведенном выше случае CASE, используйте предложение WHERE:

select
    case
        when from_value = $from_value and to_value = $to_value   then rate
        when from_value = $to_value   and to_value = $from_value then 1 / rate
    end
where (from_value = $from_value and to_value = $to_value)
   or (from_value = $to_value   and to_value = $from_value)
0 голосов
/ 24 марта 2012

еще не пробовал, но вы можете использовать конструкцию IF следующим образом

SELECT if from_value = $from_value and to_value = $to_value then rate else 1/rate end as   rate from tablename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...