我有这张桌子:
id | word1 | word2
1 | 100 | 200
2 | 101 | 200
例如,对于当前表,我只想一次显示word_number
值-这是我的预期结果:
100, 101, 200
我已经尝试过了:
$stmt = $mysqli->prepare('SELECT word1, word2 FROM table GROUP BY word1, word2 ORDER BY id DESC LIMIT ?, ?');
$stmt->bind_param('ii', $start,$perpage);
$stmt->execute();
这样,其组仅包含单词1,因此其结果为:
100, 200, 101, 200
当我将GROUP BY
更改为word2
时,它是正确的,但是相反。
id | word1 | word2
1 | 100 | 200
2 | 101 | 200
对于此表,id
行为其主键,其平均每一行都在增长。
因此对于word1 = 100,word2 = 200-id
的值1
-我想ORDER BY
这个id
键。
答案 0 :(得分:1)
如果您真的不需要按ID对结果进行排序?
然后,您可以对两个单词字段使用正常的UNION
进行选择。
正常的UNION
已经丢弃了重复项,因此它不需要GROUP BY
。
$stmt = $mysqli->prepare('SELECT word1 as word FROM table UNION SELECT word2 FROM table ORDER BY word DESC LIMIT ?, ?');
如果确实需要按ID对其进行排序,则使用UNION ALL
并不能删除公映。因此,您可以对子查询进行分组和排序。
然后查询可能是这样的:
SELECT word
FROM
(
SELECT id, word1 as word
FROM table
UNION ALL
SELECT id, word2
FROM table
) q
GROUP BY word
ORDER BY MAX(id) DESC
LIMIT ?, ?
或者使用CROSS JOIN
进行数字欺骗。
select case n when 1 then word1 when 2 then word2 end as word
from table
cross join (select 1 n union all select 2) N
group by word
order by min(id) desc
limit ?, ?