如何在SQL查询中使用ELSE?

时间:2014-11-25 09:41:51

标签: php mysql

我有一个SQL查询来从我的数据库加载项目。

$sql_query = "SELECT * FROM pagina_info 
              WHERE kwali='Luxuary' AND 
                    id IN (
                           SELECT CASE WHEN kwali='Luxuary' THEN min(id) 
                                       ELSE max(id) 
                           END 
                           FROM pagina_info 
                           GROUP BY product_name
                          ) 
               AND voorraad>='1' 
               LIMIT ".$getal1.", ".$getal2."";

现在我的问题是,我可以在ELSE状态下使用下一个值吗?

在我的选择中我有THEN min(id)ELSE max(id),而不是max(id)我需要一个单词或其他东西作为下一个值。

我无法找到任何有用的东西,希望这里的任何人都可以帮助我。

的Bram

1 个答案:

答案 0 :(得分:1)

没有关键词可以获得下一个ID。但我不确定你是指那一系列记录的下一个id,还是下一个将被指定为自动增量主键的id。

假设第一个您可以使用用户变量来添加序列号,或者您可以将表连接到自身,其中第二个副本具有更大的ID但在产品名称上匹配。

根据您的具体要求(某些表格布局和测试数据会有所帮助),可以使用其中一种方法。

首先,子查询与IN子句一起使用

SELECT * 
FROM pagina_info 
WHERE kwali='Luxuary'
AND id IN 
(   
    SELECT CASE 
                WHEN kwali='Luxuary' THEN min(a.id) 
                ELSE min(b.id) 
            END 
    FROM pagina_info a
    LEFT OUTER JOIN pagina_info b
    ON a.product_name = b.product_name
    AND a.id < b.id
    GROUP BY a.product_name
) 
AND voorraad>='1' 
LIMIT ".$getal1.", ".$getal2."";    

或者对子查询进行连接。

SELECT pagina_info.* 
FROM pagina_info 
INNER JOIN 
(
    SELECT CASE 
                WHEN kwali='Luxuary' THEN min(a.id) 
                ELSE min(b.id) 
            END AS id
    FROM pagina_info a
    LEFT OUTER JOIN pagina_info b
    ON a.product_name = b.product_name
    AND a.id < b.id
    GROUP BY a.product_name
) c
ON pagina_info.id = c.id
WHERE pagina_info.kwali='Luxuary'
AND pagina_info.voorraad>='1' 
LIMIT ".$getal1.", ".$getal2."";