2010-03-14 30 views
0

我有一個存儲圖像信息的MySQL數據庫。目前,它只有三行存儲在數據庫中,每行都與類似的東西相關聯,例如,通過關鍵字列的獨特博客文章。MySQL使用GROUP BY語句返回更少的行

截至目前,一個「博客帖子鍵」有一個圖像,一個圖像在數據庫中。

當我運行這個查詢時,MySQL返回所有三行。

SELECT `id`, `key`, `url` 
FROM (`images`) 
WHERE `key` = 'TpaS4G5h' 
OR `key` = '78855e44' 

然而,當我加入GROUP BY聲明我只得到兩行......一個爲每個鍵。

SELECT `id`, `key`, `url` 
FROM (`images`) 
WHERE `key` = 'TpaS4G5h' 
OR `key` = '78855e44' 
GROUP BY `key` 

我敢肯定有一個簡單的解決辦法,但我不知道它是什麼......所以任何幫助將非常感激。

在此先感謝!

回答

6

GROUP BY將按組值​​排列的所有行組合到一行中,所以它完全按照它的設想進行。如果您希望具有相同密鑰的行以連續行的形式返回,請改爲執行ORDER BY

+0

我想要做的是從數據庫中選擇兩個「項目」,然後獲取與這些項目相關的所有圖像,以便我可以輕鬆地將數據組合在一起。 – bschaeffer 2010-03-14 04:10:02

+1

@bschaeffer:你的第一個查詢應該這樣做。 – 2010-03-14 04:14:04

0

您不需要爲該查詢進行分組!按組將選定列的相同值分組到單個行中。

0

您在第一個查詢中指定了兩個鍵,並返回了三行,這意味着您在列表中有一個重複的列。要驗證這一點,如果你這樣做

select distinct key from images 

你應該只看到兩行。這意味着,如果您按此列進行分組,那麼所有具有此關鍵字的結果將彙總在解釋您所看到的行爲的結果中。

0

GROUP BY用於將符合分組標準的任何行「摺疊」爲單行,因此您可以對它們使用集合函數。 SUM(),COUNT()等。

如果你的意思是你想分組記錄,這樣你就可以在單個fetchrow調用中檢索與每個鍵相關的所有圖像,那麼這不是GROUP BY是爲了。您試圖將基於多行的數據集轉換爲單行。如果你試圖做的是檢索這些圖像的ID,並做到在一個單一的每行取,你可以使用類似

SELECT key, group_concat(id) 
FROM images 
WHERE key=XXX or key=YYY 
GROUP BY key 

這會給你一個數據集,看起來像這樣:

key  group_concat(id) 
------------------------ 
xxx  100,101 
yyy  102,103 

但這需要在腳本中進行後處理,以便將這些連續ID分隔爲單獨的數字。