是否可以用合并2个SQL查询替换PHP'逻辑'(子查询将依赖于原始查询)

时间:2014-10-25 13:36:31

标签: mysql

我有一个名为channel_user_mm的表。 我尝试用一​​个MySQL语句选择一个特殊行。

这是一个SQL小提琴: http://sqlfiddle.com/#!2/cef86/4/0

有两个单独的SQL语句与PHP结合使用是一种“标准方式”来解决这个问题:

SELECT DISTINCT
    local
FROM  
    `channel_user_mm` 
WHERE 
    `foreign` = 2
        OR  
    `foreign` = 3

此查询提供了一堆通道ID。现在我在PHP中进行测试并使用下面的查询进行测试。

SELECT DISTINCT
    COUNT(*) items
FROM  
    `channel_user_mm` 
WHERE  
    `local` = 12

我想知道是否可以将这两者压缩为一个查询。我用子查询试了一下。

SELECT DISTINCT
    local
FROM  
    `channel_user_mm` 
WHERE
    (   
        `foreign` = 2
            OR  
        `foreign` = 3
    )
        AND
    (
        SELECT DISTINCT
            COUNT(*) items
        FROM  
            `channel_user_mm` 
        WHERE  
            `local` = 12
    ) <= 2

我需要子查询中的通道ID。我不知道如何解决这个问题atm。

所以我脑子里有两个问题。

  • 是否可以将两个查询合并为一个?
  • 它看起来怎么样?

我希望有人帮助我。

2 个答案:

答案 0 :(得分:0)

这是你想要的吗?

SELECT c.local, COUNT(*) items
FROM  `channel_user_mm` c
GROUP BY c.local 
WHERE `foreign` in (2, 3);

正如我想的那样,你似乎想要&#34;本地&#34;其中至少有一行的foreign值为2或3。此查询可以执行您想要的操作:

SELECT c.local, COUNT(*) items
FROM  `channel_user_mm` c 
GROUP BY c.local
HAVING max(`foreign` in (2, 3)) > 0;

注意:foreign是列的错误名称,因为它是SQL保留字。

答案 1 :(得分:0)

感谢您的帮助。 我忘了说些什么,抱歉。

目前我想得到的结果只有两个元素。 例如。列local中值为13的元素的计数为3.我只想要一个2的计数(local = 12)