SELECT
ifnull(
max(case when `US_ID`='3' AND `ST`='1' then NUMBER else null end),
ifnull(max(NUMBER),0)+1
) as maxnumber
FROM
`table`
MySQL запрос с двумя наборами параметров
Столкнулся тут с такой проблемой. Необходимо написать запрос к базе с двумя наборами параметров WHERE.
Есть одна таблица с полями:
ID ; Number ; US_ID ; ST
Запрос должен выдать максимальное значение столбца Number при US_ID=3 AND ST=1 если таково существует, иначе максимальное значение Number+1
Я пробовал разные комбинации в стиле:
Код:
SELECT
IF
(
MAX(NUMBER) IS NULL,
(SELECT MAX(NUMBER)+1 FROM `table`),
MAX(NUMBER)
)
FROM `table` WHERE `US_ID`='3' AND `ST`='1'
IF
(
MAX(NUMBER) IS NULL,
(SELECT MAX(NUMBER)+1 FROM `table`),
MAX(NUMBER)
)
FROM `table` WHERE `US_ID`='3' AND `ST`='1'
Код:
Я так понимаю, у вас задача найти максимальный, а если такового нет, то использовать единицу. Попробуйте просто:
Код:
SELECT IFNULL(MAX(NUMBER),1) as maxnumber FROM `table` WHERE `US_ID`='3' AND `ST`='1'
Код:
SELECT
IFNULL(
MAX(NUMBER),
(SELECT IFNULL(MAX(NUMBER),0)+1 FROM `table`)
) as maxnumber
FROM
`table`
WHERE
`US_ID`='3' AND
`ST`='1'
IFNULL(
MAX(NUMBER),
(SELECT IFNULL(MAX(NUMBER),0)+1 FROM `table`)
) as maxnumber
FROM
`table`
WHERE
`US_ID`='3' AND
`ST`='1'
Второй вариант это именно то, что мне было необходимо. Я пытался вывести сам нечто подобное, к сожалению не хватило знаний.
Моя ошибка была в том, что я пытался часть "ifnull(max(NUMBER),0)+1" описать с помощью конструкции кейсов и видимо совсем запутался.
Кстати не встречал в мануалах конструкции вида
Код:
SELECT (CASE WHEN... ) FROM ...
Вариант предложенный мною изначально работает, но при условии, что в таблице уже есть записи.
Ваш последний вариант работает и при отсутствии записи
Кстати, если на вопрос ответили, тут теперь есть опция, отметить как ответ...какбэ намекаю...=)