Php GroupBy不适用于MySQL 5.7,因为5.7使用;只有“完整”组“由”;SQL_模式的选项。

Php GroupBy不适用于MySQL 5.7,因为5.7使用;只有“完整”组“由”;SQL_模式的选项。,php,mysql,Php,Mysql,我想显示组,应该是随机的,当用户打开页面时显示两个组。因此,下面的查询工作正常,但分组方式不适用于MySQL 5.7使用的许多查询,因为5.7在SQL模式中使用了“ONLY\u FULL\u GROUP\u BY”选项。除了“分组依据”,您还可以建议其他查询格式吗 查询必须显示为 如果登录的用户id($uid)未加入组用户F.group\u用户id'$uid' 如果登录的用户id($uid)不是组所有者(组创建者)组G.group\u owner\u id'$uid' $query = mysq

我想显示组,应该是随机的,当用户打开页面时显示两个组。因此,下面的查询工作正常,但分组方式不适用于MySQL 5.7使用的许多查询,因为5.7在SQL模式中使用了“ONLY\u FULL\u GROUP\u BY”选项。除了“分组依据”,您还可以建议其他查询格式吗

查询必须显示为

如果登录的用户id(
$uid
)未加入组用户
F.group\u用户id'$uid'

如果登录的用户id(
$uid
)不是组所有者(组创建者)
G.group\u owner\u id'$uid'

$query = mysqli_query($this->db,"SELECT DISTINCT 
G.group_id, 
G.group_owner_id, 
G.group_name, 
G.group_title, 
G.group_cover, 
F.group_oid, 
F.group_user_id 
FROM groups G, 
group_users F 
WHERE G.status ='1' AND 
G.group_id = F.group_oid AND 
G.group_owner_id <> '$uid' AND 
F.group_user_id <> '$uid' 
GROUP BY G.group_id 
ORDER BY rand() 
LIMIT 2 ") or die(mysqli_error($this->db));
$query=mysqli\u query($this->db),选择DISTINCT
G.集团id,
G.集团所有者id,
G.集团名称,
G.集团名称,
G.团体保险,
F.类,
F.组用户id
来自G组,
组用户
其中G.status='1'和
G.组id=F.组id和
G.组所有者id“$uid”和
F.组用户id“$uid”
按G.GROUP\U id分组
兰德订单()
限制2”)或死亡(mysqli_错误($this->db));

鉴于您已经在使用
SELECT disect
,这意味着您甚至不需要使用
GROUP BY
。只要删除它,错误就会消失。如果您想使用
groupby
来模拟
DISTINCT
将产生的效果,那么您可以简单地
groupby
每列:

SELECT
    G.group_id, 
    G.group_owner_id, 
    G.group_name, 
    G.group_title, 
    G.group_cover, 
    F.group_oid, 
    F.group_user_id 
FROM groups G
INNER JOIN group_users F
    ON G.group_id = F.group_oid
WHERE
    G.status = '1' AND
    G.group_owner_id <> '$uid' AND
    F.group_user_id <> '$uid'
GROUP BY
    G.group_id, 
    G.group_owner_id, 
    G.group_name, 
    G.group_title, 
    G.group_cover, 
    F.group_oid, 
    F.group_user_id
ORDER BY rand()
LIMIT 2;
选择
G.集团id,
G.集团所有者id,
G.集团名称,
G.集团名称,
G.团体保险,
F.类,
F.组用户id
来自G组
内部联接组\u用户F
关于G.group\u id=F.group\u oid
哪里
G.状态='1'和
G.组所有者id“$uid”和
F.组用户id“$uid”
分组
G.集团id,
G.集团所有者id,
G.集团名称,
G.集团名称,
G.团体保险,
F.类,
F.组用户id
兰德订单()
限制2;

请注意,如果您还选择了一些列的聚合,我们将有更多的工作要做。然后,我们很可能会引入一个或多个子查询来解决您所面临的
groupby
问题。

鉴于您已经在使用
selectdisect
,这意味着您甚至不需要使用
groupby
。只要删除它,错误就会消失。如果您想使用
groupby
来模拟
DISTINCT
将产生的效果,那么您可以简单地
groupby
每列:

SELECT
    G.group_id, 
    G.group_owner_id, 
    G.group_name, 
    G.group_title, 
    G.group_cover, 
    F.group_oid, 
    F.group_user_id 
FROM groups G
INNER JOIN group_users F
    ON G.group_id = F.group_oid
WHERE
    G.status = '1' AND
    G.group_owner_id <> '$uid' AND
    F.group_user_id <> '$uid'
GROUP BY
    G.group_id, 
    G.group_owner_id, 
    G.group_name, 
    G.group_title, 
    G.group_cover, 
    F.group_oid, 
    F.group_user_id
ORDER BY rand()
LIMIT 2;
选择
G.集团id,
G.集团所有者id,
G.集团名称,
G.集团名称,
G.团体保险,
F.类,
F.组用户id
来自G组
内部联接组\u用户F
关于G.group\u id=F.group\u oid
哪里
G.状态='1'和
G.组所有者id“$uid”和
F.组用户id“$uid”
分组
G.集团id,
G.集团所有者id,
G.集团名称,
G.集团名称,
G.团体保险,
F.类,
F.组用户id
兰德订单()
限制2;

请注意,如果您还选择了一些列的聚合,我们将有更多的工作要做。然后,我们很可能会引入一个或多个子查询来解决您所面临的
分组问题。

如果您阅读手册,您所要做的就是正确地编写分组,它就会工作。@RiggsFolly我需要帮助,因为我做不到。@Azzo鉴于您正在使用
选择DISTINCT
,我推测你甚至不需要使用
groupby
来获得你想要的结果。您应该能够完全删除它,或者在
GROUP BY
子句中包含select语句中的每一列。如果您阅读了手册,您所要做的就是正确地编写您的GROUP BY,它就会工作。@RiggsFolly我需要帮助,因为我做不到。@Azzo鉴于您正在使用
select DISTINCT
,我推测你甚至不需要使用
groupby
来获得你想要的结果。您应该能够完全删除它,或者在
GROUP BY
子句的select语句中包含每一列。如果
选择DISTINCT
一组列,则这些列不可能有重复的行。我相当肯定你的数据有问题,尽管我不知道确切的原因。也许您可以使用此边缘案例中的数据更新您的问题,让我们尝试解决它。用最简单的方式来说,
$uid
4查看
组id
16两次。因为
$uid
4未从
group\u用户中加入
group\u oid
16table@Azzo严格来说,这不是两条记录的副本,它只是
group\u id
值的副本。然后,您需要提供选择这两个记录之一的逻辑。实际上,如果您可以提供一个包含示例数据和所需输出的最小问题,那就更好了。如果您
选择DISTINCT
一组列,就不可能存在与这些列相关的重复行。我相当肯定你的数据有问题,尽管我不知道确切的原因。也许您可以使用此边缘案例中的数据更新您的问题,让我们尝试解决它。用最简单的方式来说,
$uid
4查看
组id
16两次。因为
$uid
4未从
group\u用户中加入
group\u oid
16table@Azzo严格来说,这不是两条记录的副本,它只是
group\u id
值的副本。然后,您需要提供选择这两个记录之一的逻辑。实际上,如果您能提供一个带有示例数据和所需输出的最小问题,那就更好了。