新更新:我首先按名為“fav”的不同欄位排序
該$result的$query只顯示領域$row['symbol'],它不顯示的欄位$row['id']。我究竟做錯了什么?
CREATE TABLE `tableName` (
`id` varchar(15) DEFAULT NULL,
`symbol` varchar(10) DEFAULT NULL,
`fav` varchar(15) DEFAULT NULL
)
$query = "SELECT symbol FROM (SELECT * FROM tableName ORDER BY fav DESC ) AS t GROUP BY t.symbol ";
$result = mysqli_query($conn, $query);
if($result->num_rows > 0){
while($row = mysqli_fetch_assoc($result)){
echo 'id: '.$row['id'].' symbol: '.$row['symbol'].'<BR>';
}
}
我正在使用 PHP 7.4.16
更新:使用 PHP 8.0.3 我收到此錯誤訊息:
警告:未定義的陣列鍵“id”
它就像沒有找到 id,但是如果我像這樣運行它,它作業正常:
$query = "SELECT * FROM tableName ORDER BY symbol DESC";
uj5u.com熱心網友回復:
我不明白這個問題。我最好的猜測是不需要 GROUP BY:
SELECT symbol,
fav,
id
FROM tableName
ORDER BY symbol DESC,
fav DESC,
id
另一種可能性是收集每個符號的所有 id:
SELECT symbol,
GROUP_CONCAT(id SEPARATOR ', ')
FROM tableName
GROUP BY symbol DESC
編輯以包含列fav:
SELECT symbol,
fav,
GROUP_CONCAT(id SEPARATOR ', ') AS ids
FROM tableName
GROUP BY symbol DESC,
fav DESC
ORDER BY symbol DESC,
fav DESC
uj5u.com熱心網友回復:
很難從 SQL 查詢中辨別出您的意圖。您的查詢是這樣的。
SELECT symbol
FROM (
SELECT * FROM tableName ORDER BY symbol DESC
) AS t
GROUP BY t.symbol
它的意思與此相同。(我省略了 ORDER BY,因為子查詢中的 ORDER BY 操作不能保證執行到外部查詢。)
SELECT DISTINCT symbol FROM tableName
這些查詢都不回傳id列。這就是您對 php 的參考$row['id']失敗的原因。
你可能想要ORDER BY而不是GROUP BY嗎?在這種情況下,您的查詢將是
SELECT * FROM tableName ORDER BY symbol DESC
或者,symbol您的表中是否可能有重復的值,而您只想要id重復的行之一?在那種情況下,你想要這樣的東西。
SELECT MAX(id) id, symbol
FROM tableName
GROUP BY symbol
ORDER BY symbol DESC
該查詢為每個不同的符號值找到最大的 id 值并回傳它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/367603.html
