有没有办法选择第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
结果对我来说很奇怪。似乎它只返回第二个查询结果,它们不是第4个第5和第6行,而是第5个第6和第3行(按此顺序)。 我的表格行是:
id
1
2
3
4
5
6
7
答案 0 :(得分:1)
您可以通过以下查询来做到这一点:
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
)的新表。然后将它们加入匹配的行号以得到所需的结果。