2014-09-19 5 views
-2

У меня есть запрос, который выглядит следующим образом:MySQL Select с тем, где условие основано на количестве

SELECT * FROM `bas_HCCxmlSettings` 
WHERE `waarde3` = 'Oke' 
    OR `waarde4` = 'Oke' 
    AND `config` = 'XMLserver' 

Теперь я хочу добавить особые условия, если счетчик waarde2 != 0 то условие waarde2 = 'int' еще waarde2 = 'ext'

это то, что Я пробовал:

попробовать 1:

SELECT * FROM `bas_HCCxmlSettings` 
WHERE `waarde3` = 'Oke' 
    OR `waarde4` = 'Oke' 
    AND `config` = 'XMLserver' 
    AND `waarde2`= 
    (
     (
      SELECT count(*) 
      FROM `bas_HCCxmlSettings` 
      WHERE `config` = 'XMLserver' AND`waarde2`= 'int' AND 
       (`waarde3` = 'Oke' 
        OR `waarde4` = 'Oke' 
       ) 

     ) > 0 
     ,'int' 
     ,'ext' 
    ) 

try2:

if (SELECT count(*) FROM `bas_HCCxmlSettings` WHERE `waarde2`= 'int' AND (`waarde4` = 'Oke' OR `waarde3`= 'Oke')) > 0 
    THEN 
     SELECT count(*) FROM `bas_HCCxmlSettings` WHERE `waarde2`= 'int' AND (`waarde4` = 'Oke' OR `waarde3`= 'Oke') 
else 
     SELECT count(*) FROM `bas_HCCxmlSettings` WHERE `waarde2`= 'ext' AND (`waarde4` = 'Oke' OR `waarde3`= 'Oke') 
    END 

Что я делаю неправильно?

некоторые разъяснения в моих критериев запроса для основного запроса

Критерии selecetion должны быть: 1. конфигурации = «XMLserver» 2. Waarde3 или waarde4 или как быть муз «Оке»

запроса для без waard2 в качестве критериев будет:

SELECT * FROM `bas_HCCxmlSettings` 
WHERE `config` = 'XMLserver' 
    AND`waarde2`= 'int' 
    AND (
     `waarde3` = 'Oke' 
      OR 
      `waarde4` = 'Oke' 
     ) 

для отсрочки значения waarde2 моих requerments выбора является:

  1. конфиг = 'XMLserver'
  2. waarde2 = INT
  3. Waarde3 или waarde4 или оба должны быть 'ОЭК'

Количество запросов будет затем:

SELECT count(*) FROM `bas_HCCxmlSettings` 
WHERE `config` = 'XMLserver' 
    AND`waarde2`= 'int' 
    AND (
     `waarde3` = 'Oke' 
     OR 
     `waarde4` = 'Oke' 
     ) 

Если подсчет этого выбора равен 0, тогда waarde = ext Если подсчет этого выбора равен lager, то 0 waarde = int

+0

Первое, что я заметил, что вы хотите добавить условие waarde2' = 0, однако у вас есть> 0 условие в try1 и try2 –

+0

Что вы имеете в виду! 'если счет waarde2! = 0'? 'waarde2' - это столбец. Вы хотите посчитать, есть ли в списке один раз 'waarde2 = 'int''? –

+0

Обратите внимание, что вам нужны скобки, чтобы ваша работа 'OR' работала так, как вы этого хотите. т.е. «A OR B AND C» анализируется как «A ИЛИ (B И C)« не »(A ИЛИ B) И C' – Bohemian

ответ

-2
SELECT * FROM `bas_HCCxmlSettings` 
WHERE `waarde3` = 'Oke' 
OR `waarde4` = 'Oke' 
AND `config` = 'XMLserver' 
AND waarde2 = (CASE COUNT(waarde2) 
       WHEN 0 THEN 'ext' 
       ELSE 'INT' 
       END) 

Сообщите мне, если это работает !!!!

+0

, он не запрещает использование групповой функции –

0

Я, наконец нашел гуманного и это:

SELECT * FROM `bas_HCCxmlSettings` 
WHERE `config` = 'XMLserver' 
AND (
    `waarde3` = 'Oke' 
    OR 
    `waarde4` = 'Oke' 
    ) 
    AND 
    CASE 
    (
     select COUNT(*) from bas_HCCxmlSettings 
     where 
     `config` ='XMLserver' 
     AND 
     `waarde2` = 'int' 
     AND 
     (
      `waarde3` = 'Oke' 
      OR 
      `waarde4` = 'Oke' 
      ) 
     ) 
     WHEN 0 
     THEN `waarde2` = 'ext' 
     ELSE `waarde2` = 'int' 
     END 
Смежные вопросы