GROUP BY每列多列

时间:2019-03-05 14:09:39

标签: php mysql mysqli

我有这张桌子:

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键。

1 个答案:

答案 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 ?, ?