Расширенный Mysql запрос с учетом и когда - PullRequest
0 голосов
/ 05 июня 2018

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

SELECT * FROM contract 
WHERE `id` NOT IN ( 
    CASE 
        WHEN type = 1 THEN '159,154' 
        WHEN type = 2 THEN '' 
        WHEN type = 3 THEN '' 
    END 
) 
ORDER BY id DESC 

Здесь вы можете увидеть, что если тип контракта = 1тогда результат не должен отображать 159 и 154 записей из таблицы.Но 154 числа записи также приходит в результате, который не должен.

Любая помощь приветствуется!

Ответы [ 3 ]

0 голосов
/ 05 июня 2018
...WHERE (type = 1 AND id NOT IN('159','154')) 
OR   (type = 2 AND id !='') 
OR   (type = 3 AND id !='') 

Удалите кавычки, если идентификатор числовой, чтобы вы могли использовать возможный индекс.

0 голосов
/ 05 июня 2018

Я думаю, что это будет работать:

SELECT * FROM contract 
WHERE (type = 1 AND id NOT IN ('159','154')) OR
    (type IN (2,3) AND id != '')
ORDER BY id DESC 
0 голосов
/ 05 июня 2018

Используйте функцию MySQL INSTR () , как показано ниже:

SELECT * FROM contract 
WHERE INSTR(IF(type = 1, '159,154',''),`id`)<0
ORDER BY id DESC;
...