首页 > 解决方案 > 用于选择多行作为这些行数据的数组的 MySQL 查询

问题描述

有没有办法选择前 3 行,然后选择下 3 行(偏移量 3)并在单个查询中将结果作为两个数组获取?就像是:

(SELECT * FROM product WHERE 1 LIMIT 3) as first_array
(SELECT * FROM product WHERE 1 OFFSET 3 LIMIT 3) as second_array

希望你能理解我。抱歉解释只是不知道如何以其他方式解释。

可以说我只想要 ids - 输出示例:

id_1   id_2
 1       4
 2       5
 3       6

我从帖子下面的答案中尝试过的是:

SELECT id as id_1 FROM `ct_product` WHERE 1 LIMIT 3
UNION ALL
SELECT id as id_2 FROM `ct_product` WHERE 1 LIMIT 3 OFFSET 3

结果对我来说很奇怪。它似乎只返回第二个查询结果,它们不是第 5 行和第 4 行,而是第 5 行和第 6 行和第 3 行(按此顺序)。我的表格行是:

id
1
2
3
4
5
6
7

标签: mysql

解决方案


你可以用这个查询来做到这一点:

SELECT a1.id, a2.id
FROM (SELECT *, @rownum1:=@rownum1+1 AS rownum
      FROM (SELECT id
            FROM `ct_product`
            LIMIT 3
            ) art
      JOIN (SELECT @rownum1 := 0) r
      ) a1
JOIN  (SELECT *, @rownum2:=@rownum2+1 AS rownum
      FROM (SELECT id
            FROM `ct_product`
            LIMIT 3, 3
            ) art
      JOIN (SELECT @rownum2 := 0) r
      ) a2
ON a1.rownum = a2.rownum

输出:

id  id  
1   4
2   5
3   6

此查询通过使用原始表中的前 3 行和后 3 行人工生成的行号 (@rownum1和) 创建两个新表来工作。@rownum2然后将它们加入匹配的行号以获得所需的结果。


推荐阅读