簡體   English   中英

GROUP BY 每列多列

[英]GROUP BY Multiple columns each on

我有這張桌子:

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();

這樣它的組只有 word1,所以結果是:

100, 200, 101, 200

當我將GROUP BY更改為word2它是正確的,但相反。

問題的更多解釋:

id   | word1   | word2
1    |  100    | 200
2    |  101    | 200

對於這個表, id行是它的主鍵,它的意思是每一行都增長。 所以對於 word1 = 100, word2 = 200 - id值為1 - 我想按這個idORDER BY

如果您真的不需要按 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 ?, ?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM