我在 phpmyadmin 資料庫表上運行此查詢作業正常:
select substring_index( prefix, '.', 3 ) as subip , count(prefix) as count, prefix
from prefixes
GROUP BY INET_ATON(subip)/256
order by cidr desc
當我在 laravel 中運行原始查詢時:
$selected_prefixes = DB::select("select substring_index( prefix, '.', 3 ) as subip , count(prefix) as count, prefix
from prefixes
GROUP BY INET_ATON(subip)/256
order by cidr desc ");
給出這個錯誤:
SQLSTATE [42000]:語法錯誤或訪問沖突:1055 'portal.prefixes.prefix' 不在 GROUP BY 中(SQL:select substring_index( prefix, '.', 3 ) as subip , count(prefix) as count, prefix從前綴 GROUP BY INET_ATON(subip)/256 order by cidr desc )
這里的示例表檔案:https : //www.mediafire.com/file/vwnply7ggtai52m/prefixes(5).sql/ file
uj5u.com熱心網友回復:
在大多數 SQL 實作中,對不屬于 group by 的列進行選擇是無效的,因為應該為該串列示的實際行可能是任何分組行。
我懷疑您使用的 MySQL 允許通過某些設定進行此操作,在這種情況下,它將從組中輸出一個隨機值(不一定是第一個)。通過 Laravel 運行時,database.php 配置中必須有其他設定(更嚴格的設定)。
您可以放松資料庫配置中的嚴格設定,或者您可以重寫查詢,這樣您就不會選擇不屬于 GROUP BY 的列。
uj5u.com熱心網友回復:
您無法檢索該prefix列,因為一些相似的subip有不同的prefixes。我將示例放在下面的鏈接中。你可以檢查一下。
以下代碼可以正常作業。
select substring_index(prefix, '.', 3) as subip, count(*) as count
from prefixes
group by substring_index(prefix, '.', 3)
db<>fiddle 中的演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/406867.html
標籤:
