如何在不使用 UNION 或子查询的情况下将此查询更改为一个查询?允许加入。
问题是某些产品与group_code
列中的值组合在一起。这意味着在查询结果中只应返回一个。我正在使用Doctrine querybuilder,我无法使用union或子查询
我尝试通过执行两个查询并将结果与PHP结合来解决此问题。但是当我试图对结果进行分页并且我会说限制2时,这将返回4个结果,因为两个查询都会得到2个结果。
(SELECT *
FROM product
WHERE group_code != ''
GROUP BY group_code)
UNION ALL
(SELECT *
FROM product
WHERE group_code IS NULL
GROUP BY id)
LIMIT 0, 2;
id | title | group_code
------------------------------------
1 | t-shirt blue | t-shirt
4 | t-shirt with image | NULL
CREATE TABLE `product` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) DEFAULT NULL,
`group_code` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `product` (`id`, `title`, `group_code`)
VALUES
(1, 't-shirt blue', 't-shirt'),
(2, 't-shirt green', 't-shirt'),
(3, 't-shirt orange', 't-shirt'),
(4, 't-shirt with image', NULL),
(5, 'sweater', NULL),
(6, 'jumsuit', NULL);
答案 0 :(得分:1)
这会给你相同的结果。但是由于您正在进行分组但是没有汇总结果,因此查询有点冒险..
SELECT *
FROM product
GROUP BY COALESCE(group_code, id)
ORDER BY 1 LIMIT 0,
2