我在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 ");
给出此错误:
SQLSTATE42000:语法错误或访问冲突: 1055 'portal.prefixes.prefix‘不按以下方式分组(SQL:选择substring_index(前缀,'.',3)作为subip,计数(前缀)作为计数,前缀从前缀组按INET_ATON(subip)/256顺序按cidr desc选择)
这里的示例表文件:https://www.mediafire.com/file/vwnply7ggtai52m/prefixes(5).sql/file
发布于 2022-01-08 08:12:41
您无法检索prefix
列,因为一些类似的subip
有不同的prefixes
。我把例子放在下面的链接中。你可以去看看。
以下代码正常工作。
select substring_index(prefix, '.', 3) as subip, count(*) as count
from prefixes
group by substring_index(prefix, '.', 3)
db<>fiddle中的演示
发布于 2022-01-08 07:35:34
在大多数SQL实现中,对不属于grouped的列执行select操作是无效的,因为应该为该列表示的实际行可能是任何分组行。
我怀疑您使用的是MySQL,它允许使用特定的设置,在这种情况下,它将从组输出一个随机值(不一定是第一个)。在运行Laravel时,database.php配置中必须有其他设置(更严格的设置)。
您可以放松数据库配置中的严格设置,也可以重写查询,这样就不会选择不属于组的列。
https://stackoverflow.com/questions/70633794
复制相似问题