gpt4 book ai didi

php - Mysql group_concat(id) 作为左连接中的 ids 并使用 ids 选择 id 组中的所有列

转载 作者:行者123 更新时间:2023-11-29 07:08:40 29 4
gpt4 key购买 nike

我有一个表,其中包含一些具有自己的 ID 和共享 SKU key 的文章。我尝试使用左连接进行查询,并使用组结果获取从查询返回的所有 id。

我的数据结构是这样的:

id -    name   - sku - ...
1 - felix - cat
2 - tom - cat - ...
3 - sylvester - cat - ...
4 - red - pen - ...
5 - blue - pen - ...

我尝试使用此查询:

SELECT * FROM `test` 
[LEFT/RIGHT/INNER] JOIN
(
SELECT GROUP_CONCAT(DISTINCT id) AS idsgroup FROM `test` WHERE (attribute_name = 'sku') GROUP BY value_name LIMIT 0, 3
) bind
ON id IN (bind.idsgroup);

这个查询是错误的,它只返回每个组 1 个 id,而不是从 concat 或 LEFT JOIN 情况下选择的所有 id,显然是所有行。

有什么建议的解决方法可以达到正确的结果吗?

编辑:

这里有一个结构: http://sqlfiddle.com/#!9/b6747a

我尝试的查询:

   SELECT * FROM `view_test` 
INNER JOIN
(
SELECT GROUP_CONCAT(DISTINCT entity_id) AS idsgroup FROM `view_test` WHERE (attribute_name = 'sku') GROUP BY value_name LIMIT 0, 3
) bind
ON entity_id IN (bind.idsgroup);

正如这张图片所示,我的结果丢失了一些 ID,它们是组的一部分。 query result

编辑2:在我使用 Kickstart 建议的 FIND_IN_SET() 之后,结果是预期的:

SELECT * FROM `view_test` 
INNER JOIN
(
SELECT GROUP_CONCAT(DISTINCT entity_id) AS idsgroup FROM `view_test` WHERE (attribute_name = 'sku') GROUP BY value_name LIMIT 0, 3
) bind
ON FIND_IN_SET(entity_id, bind.idsgroup);

Right result

最佳答案

简单的修复似乎是使用 FIND_IN_SET 进行连接。但这有点麻烦,而且不会那么快。

SELECT * 
FROM `view_test`
INNER JOIN
(
SELECT GROUP_CONCAT(DISTINCT entity_id) AS idsgroup
FROM `view_test`
WHERE (attribute_name = 'sku')
GROUP BY value_name
LIMIT 0, 3
) bind
ON FIND_IN_SET(entity_id, bind.idsgroup);

进一步不确定为什么子查询有 LIMIT,尤其是没有 order 子句。

最好使用子查询来获取带有 sku attribute_name 的 DISTINCTEntity_id 并对其进行联接。

SELECT * 
FROM `view_test`
INNER JOIN
(
SELECT DISTINCT entity_id
FROM `view_test`
WHERE (attribute_name = 'sku')
) bind
ON view_test.entity_id = bind.entity_id

关于php - Mysql group_concat(id) 作为左连接中的 ids 并使用 ids 选择 id 组中的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40650205/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com