【问题标题】:Mysql query on the result set of other queryMysql查询其他查询的结果集
【发布时间】:2018-08-13 08:03:30
【问题描述】:

我的 MySQL 数据库中有 2 个自定义表(数据库名称:test)。

我的表格数据如下:

表:sku

entity_id sku 1 24-MB01 2 24-MB03 3 24-UB02 4 24-UB01

表格:猫

id entity_id 类别 1 1 3 2 2 3 3 1 5 4 2 7 5 4 4 6 3 50 7 3 20 8 3 21 9 4 3

我正在使用以下查询来获取关于 sku 值的逗号分隔类别:

SELECT sku.entity_id, sku.sku, GROUP_CONCAT(cat.category SEPARATOR ",") as category 
FROM sku, cat 
WHERE cat.entity_id = sku.entity_id 
GROUP by sku.entity_id

以下是使用上述查询找到的结果集:

entity_id sku 类别 1 24-MB01 3,5 2 24-MB03 7,3 3 24-UB02 21,50,20 4 24-UB01 4,3

现在,我想使用此结果集来查找特定类别的记录(例如类别 ID 为 3)。当我在查询中使用 FIND_IN_SET 时,结果的类别列中只得到 3 个。我想得到它:

entity_id sku 类别 1 24-MB01 3,5 2 24-MB03 7,3 4 24-UB01 4,3

我怎样才能达到预期的效果?

【问题讨论】:

  • 编辑您的问题并使用 FIND_IN_SET 添加第二个查询以及该查询的结果。还要添加带有一些示例数据的表的架构,以便我可以设置 SQL Fiddle。

标签: php mysql resultset


【解决方案1】:

添加HAVING 子句:

SELECT sku.entity_id, 
    sku.sku, 
    GROUP_CONCAT(cat.category SEPARATOR ",") as category 
FROM sku, cat 
WHERE cat.entity_id = sku.entity_id 
GROUP by sku.entity_id
HAVING SUM(cat.category = 3) > 0;

(顺便说一句,这在 MySQL 中使用了 true = 1, false = 0。在其他 DBMS 中为 HAVING SUM(CASE WHEN cat.category = 3 THEN 1 ELSE 0 END) > 0.

【讨论】:

  • 非常有趣。
【解决方案2】:

您可以将HAVING 子句与FIND_IN_SET 一起使用:

SELECT sku.entity_id, 
    sku.sku, 
    GROUP_CONCAT(cat.category SEPARATOR ",") as category 
FROM sku, cat 
WHERE cat.entity_id = sku.entity_id 
GROUP by sku.entity_id
HAVING FIND_IN_SET(3, category)

【讨论】:

    【解决方案3】:

    为什么不在查询末尾添加HAVING category LIKE '%3%'

    所以,完整的查询是这样的:

    SELECT sku.entity_id, 
        sku.sku, 
        GROUP_CONCAT(cat.category SEPARATOR ",") as category 
    FROM sku, cat 
    WHERE cat.entity_id = sku.entity_id 
    GROUP by sku.entity_id
    HAVING category LIKE '%3%'
    

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多