2016-12-03 35 views
0

我有2個MySQL表:如何在兩列上使用sql GROUP BY子句?

站:

enter image description here

記錄:

enter image description here

用SQL查詢它的顯示結果如下:

$getStation = mysqli_query($conn, "SELECT st.st_tbl_id, st.st_name, st.st_address, st.st_lat, st.st_long, st.created, 
GROUP_CONCAT(lg.lg_name) AS lg_name 
FROM station AS st 
LEFT JOIN logger AS lg ON lg.lg_id = st.lg_id 
GROUP BY st.st_name, st.st_id, st.lg_id 
ORDER BY st.st_tbl_id DESC"); 

enter image description here

在這裏你可以看到站名是重複的值,但它應該是唯一的一個。像這種情況下它應該是康米拉和達卡

+0

你的查詢和結果不匹配。嘗試添加正確的查詢和實際結果。 –

+0

我的查詢和結果是正確的。我檢查了它 –

+1

記錄器名稱對於相同的站名是不同的,這就是爲什麼它沒有正確分組。如果你不想重複站名稱,請從'select'和'group by'中刪除記錄器名稱。 –

回答

0

https://stackoverflow.com/a/2421441/347565

在你的情況,這些條目有不同的lg_id,所以他們不會被組合在一起。我想你只需要將你的查詢改爲st.st_id就可以得到你想要的結果。

+0

如果我僅使用'st.st_id',則顯示所有重複的'lg_name' –

+0

如果您只是'按st.st_id'分組,您是否可以更新您的問題?我很確定你會得到每st_id只有一行...是不是你想要的? – Matthieu

+0

如果我使用'st.st_id'組,那麼'st_name'顯示唯一值,但'lg_name'顯示重複值。 –

0

試試這個:

$getStation = mysqli_query($conn, "SELECT st.st_name, st.st_address, st.st_lat, st.st_long, st.created, 
GROUP_CONCAT(lg.lg_name) AS lg_name 
FROM station AS st 
LEFT JOIN logger AS lg ON lg.lg_id = st.lg_id 
GROUP BY st.st_name,st.st_address,st.st_lat, st.st_long, st.created"); 
+0

和我的結果一樣。 –

+0

是的,夥計我做了 –

+0

顯示重複的lg_name與2錯誤消息 –