抱歉,您的主题含糊不清,但我很难解释这一点。我想要做的是获取一个ID,该ID代表可以在不同类别中发布的帖子,并且我希望我的帖子属于所有三个类别以符合条件。桌子看起来像这样

id      category_id
1            3
1            4
1            8


我想做的是获取属于所有这三个类别的ID,但是由于它们位于不同的行中,因此我无法使用

SELECT id FROM table WHERE category_id = '3' AND category_id = '4' AND category_id = '8';


当然,这将什么也不返回,因为没有行符合该条件。我也尝试过使用WHERE IN子句

 SELECT id from table WHERE category_id IN (3, 4, 8);


这将返回任何这些类别中的任何帖子,我要返回的帖子必须属于这三个类别。

因此,问题就来了,是否有什么好方法来查找属于所有这三个类别的id,或者我是否必须使用WHERE IN子句并查看是否获得ID为1的3行,所以我将知道它发生过三次,因此属于所有三个类别,这似乎是一个不好的解决方案。

提前致谢。感谢您的帮助。 :)

最佳答案

您可以使用group_concat获取类别ID的逗号分隔字符串,并检查其中是否包含要过滤的所有类别


    SELECT ID,GROUP_CONCAT(t2.category_id)作为类别
    从表AS t1
    内联接表AS t2 ON t1.id = t2.id
    哪里
    FIND_IN_SET('3',类别)不为空且
    FIND_IN_SET('4',类别)不为空且
    FIND_IN_SET('8',Categories)不为空


更新资料

SELECT t1.id, GROUP_CONCAT(t2.category_id) as `categories`
FROM `table` AS t1
INNER JOIN `table` AS t2 ON t1.id = t2.id
HAVING
FIND_IN_SET('3', `categories`) IS NOT NULL AND
FIND_IN_SET('4', `categories`) IS NOT NULL AND
FIND_IN_SET('8', `categories`) IS NOT NULL


最后一个查询将不起作用,因为它是一个组函数,因此该值不能在WHERE子句中使用,而可以在HAVING子句中使用。

关于mysql - MySQL ID合并问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5218562/

10-11 02:47
查看更多