2014-09-19 63 views
-2

我有查询,看起来像这样:MySQL的选择与WHERE条件基于计数

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 then waarde = ext 如果此选择的计数较大,则0 waarde = int

+0

我注意到,您要添加的条件waarde2' = 0,但是您会在try1> 0的条件和try2 – 2014-09-19 14:18:16

+0

你是什么意思的第一件事'如果waarde2!= 0'的计数? 'waarde2'是一列。你想计算一次是否有列表'waarde2 ='int''? – 2014-09-19 14:19:17

+0

请注意,您需要使用括号来使您的“OR”以您想要的方式工作。即“A或B和C”被解析为“A或(B和C)”而不是“(A或B)和C” – Bohemian 2014-09-19 14:20:00

回答

-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

它不会使用组函数 – 2014-09-19 17:13:28

0

我finaly发现sollution,它是:

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