2016-08-11 3 views
0

У меня есть следующая таблица:Как написать инструкцию MySQL с несколькими условными обозначениями?

id    (integer, primary key) 
amount_low  (integer) 
amount_high  (integer) 
fixedprice  (decimal 4,2 Null) 
percentadjust (decimal 4,2 Null) 
itemname  (varchar 50) 

запись будет иметь значение либо «fixedprice» или поле «percentadjust», но не оба. Один будет NULL, а другой будет иметь значение.

мне нужно получить записи на основе одной внесенной суммы, «X»:

Если поле «fixedprice» имеет значение, мне нужно, чтобы получить запись, если Х> = (fixedprice * amount_low) AND X - < = (фиксированная цена * сумма_высота).

Если значение поля «percentadjust» имеет значение, мне нужно получить запись, если X => ((((%) = 3,5) * amount_low) И X = < = ((((percentadjust/100) + 1) * 3.5) * amount_high).

«3.5» - это значение, которое менялось порой, и я не слишком обеспокоен этой частью.

Что такое хороший способ сделать это в MySQL?

Sample данные: (также см http://sqlfiddle.com/#!9/922a0)

id amount_low amount_high fixedprice percentadjust itemname 
----------------------------------------------------------------- 
1 20   25   2.25  NULL   A 
2 50   75   2.38  NULL   B 
3 23   32   NULL  9.75   C 
4 14   22   NULL  9.12   D 
5 96   112   2.58  NULL   E 
+1

if (x1 не является нулем, а x2 равно null) или (x1 является нулем, а x2 не является нулевым) – Drew

+0

@Drew Я немного новичок. Не могли бы вы показать инструкцию MySQL для этого? –

+0

уверен. вы можете создать sqlfiddle для создания и загрузки данных. Я буду проверять его (или кто-то другой) – Drew

ответ

0

Если предположить, что X был введен как 111 было бы

select * from tblItems 
where (fixedprice is not null and 111>=(fixedprice * amount_low) and 111 <= (fixedprice * amount_high)) 
OR (percentadjust is not null and 111>=((((percentadjust/100) + 1) * 3.5) * amount_low) AND 111<=((((percentadjust/100) + 1) * 3.5) * amount_high)) 

Примечание Вы всегда можете написать его как where xyz between A and B упростить нечто немного.

Помните, что много времени может быть потрачено впустую отладочных логических операторов, когда используются И и ИЛИ, и безопасные оболочки с круглыми скобками не используются. Итак, если вы смешиваете AND с OR, оберните вещи хорошо.

+0

Большое спасибо! Я попробовал это в своей системе, и он работает хорошо. Вы очень помогли! Я тоже буду использовать МЕЖДУ. –

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