Mysql 如何根据另一个表中没有任何重复项的最新结果选择结果?

Mysql 如何根据另一个表中没有任何重复项的最新结果选择结果?,mysql,Mysql,我有两张桌子:小组和小组活动。组的结构是 id int(11)无符号自动递增 创建者varchar(15) 名称varchar(30) 说明文本 加入政策tinyint(1) 阿凡达·瓦尔查尔(500) 创建varchar的日期(13) 组_活动表的结构如下: id int(11)自动递增 组id int(11) 行动tinytext 组活动表中的列组id与组表中的id相关,因此当您转到特定组的页面时,您会看到与之相关的所有活动 我正在为一个我是管理员的站点构建一个组功能,组主页上的一个内容是“

我有两张桌子:小组和小组活动。组的结构是

id int(11)无符号自动递增
创建者varchar(15)
名称varchar(30)
说明文本
加入政策tinyint(1)
阿凡达·瓦尔查尔(500)
创建varchar的日期(13)

组_活动表的结构如下:

id int(11)自动递增
组id int(11)
行动tinytext

组活动表中的列组id与表中的id相关,因此当您转到特定组的页面时,您会看到与之相关的所有活动

我正在为一个我是管理员的站点构建一个组功能,组主页上的一个内容是“最近活跃的组”。也许我做错了,如果我是,有人能告诉我最好的方法吗


我目前试图做的是在group_活动中显示按最新结果排序的组,但不从groups表中显示任何重复的组名aka name varchar(30)。我不熟悉根据多个表中的结果选择/筛选结果

通过获取每个组的最大自动增量列,可以对活动表使用自联接

SELECT DISTINCT name FROM groups..
select g.*,ga.*
from group_activity ga
join (select max(id) id , group_id from group_activity group by group_id ) gaa
on(ga.id=gaa.id)
join groups g on (ga.group_id =g.id)
子查询gaa将给出每个组的最大id,即最近的id,您将再次使用
group\u activity
table以自连接方式加入,以从您的表中获取操作,并在最后一次加入您的组表中

根据评论编辑

您可以为选择列指定唯一的别名,如下所示:

select g.*,ga.id AS ga_id ,ga.group_id AS ga_group_id,ga.action AS ga_action
from group_activity ga
join (select max(id) id , group_id from group_activity group by group_id ) gaa
on(ga.id=gaa.id)
join groups g on (ga.group_id =g.id)
现在,在您的php代码中,当您获取数据时,可以将数据信息用作

$row['id'] <---- Belongs to id of group
$row['creator '] <---- Belongs to creator column of group
$row['ga_id '] <---- Belongs to id of group_activity 
$row['ga_group_id'] <---- Belongs to group id of group_activity 
$row['ga_action'] <---- Belongs to action column of group_activity 

$row['id']如果我正确理解您的意思,并且您希望按操作顺序排列组,
在它们中执行时,您可以使用此查询,它按组id对活动记录进行分组,按自动递增字段的最大值排序,并联接组

select group_id, MAX(ga.id) AS max_id, g.name
from group_activity ga
left join groups g ON ga.group_id = g.id
group by group_id
order by max_id desc
如果您不需要执行特定的操作,只需在表中添加字段date\u last\u activity,在组中的每个操作上更新它,您的查询就会变得简单

select * from groups order by date_last_activity desc;
即使对于其他问题,您确实需要group\u activity表,您也可以这样做,但它会给您的方案增加一点非规范化

我也有一些建议:

  • 不要对日期字段使用varchar类型,有更合适的 这种情况下,mysql中的日期字段

  • 如果要在方案中使用联接,最好在
    组id字段。当您的桌子变大时,这将非常有帮助


谢谢,先生,它成功了。另一个问题:我在PHP中通过mysqli_fetch_数组显示结果,并希望在mysqli_num_rows查询中使用groups表中的id来获取成员数量。有groups.id和groupu activity.id。如何在$row[“”]内显示groups.id?我相信这很简单。xD它可能和AS关键字有关吗?我已经试过$row['groups.id']@DoctorSatan这是另一个问题最好问一个新问题,如果你想让我在你的新问题上发布答案,请在这里发布你的新问题的链接,这样我可以查看itI将在这里搜索(以及谷歌),看看目前是否存在任何答案,而不是用新问题浪费空间,但是谢谢你的建议。如果所有其他方法都失败,我将发布一个。:)成功了。再次感谢你的帮助,哈立德·朱奈德先生。我会支持你的回答,但不幸的是我没有足够的声誉p谢谢你提供另一种方法。我认为一个相当复杂的查询比通过添加date_last_活动浪费额外数据要好,但这也是一个只有几千名成员的网站。我会记住你对日期字段的建议。一个问题:我应该为组id使用什么类型的索引?我以前只使用过UNIQUE,但它不适用于此,因为组分配了多个操作。我想我应该使用索引?这是否提供了类似于UNIQUE的选择优化?是的,只是简单地创建索引。。。它有助于查询条件索引的_字段=某个_值,并有助于使用此字段的联接。在按索引字段分组时,也可以这样做。谢谢你的提示和解释。:)