gpt4 book ai didi

mysql - 连接和排序来自不同表的数据

转载 作者:行者123 更新时间:2023-11-29 10:20:26 25 4
gpt4 key购买 nike

这是我的数据库结构:

table: events
id
title
category_id

table: categories
id
name

table: promoters
id
name
avatar

table: dates
id
startdate
enddate

每个事件都可以有一个类别和多个发起人、日期。

然后对于日期和发起人,我使用两个数据透视表:

table: event_promoter
id
event_id
promoter_id

table: event_date
id
event_id
date_id

我需要检索所有带有按日期排序的发起人和类别字段的事件(仅获取日期 > 今天日期)。寻找查询帮助。

更新示例

两个事件:

Table Events
id | title | category_id
1 | StackOverflow Meeting | 1
2 | Easter Party | 2

Table Categories
id | name
1 | Festival
2 | Professional

Table Promoters
id | name | Avatar
1 | Joe Smith | file1.jpg
2 | Frank White| file2.jpg
3 | Mike Red | file3.jpg

Table Dates
id | start | end
1 | 01-24-2018 | 01-27-2018
2 | 04-24-2018 | 04-27-2018
3 | 04-18-2018 | 04-19-2018

table: event_promoter
id | event_id | promoter_id
1 | 1 | 1
2 | 1 | 3
3 | 2 | 2

table: event_date
id | event_id | date_id
1 | 1 | 1
2 | 1 | 2
3 | 2 | 3

由于日期(id:3),我的查询需要第一个“复活节派对”,然后在我的事件列表中:

('复活节派对'、'StackOverflow session ')

包含所有关联的关系字段。

最佳答案

首先,您需要通过在事件表中添加category_id 列来引用事件表上的类别。另外,您不需要 event_promoter 和 event_dates 中的 id 列。删除该列并将剩余的两列设为主键。

然后,最简单的方法是通过内部联接:

select events.id, events.title, 
categories.name as category,
GROUP_CONCAT(dates.startdate separator ',') as startdate,
GROUP_CONCAT(dates.enddate separator ',') as enddate,
GROUP_CONCAT(promoters.name separator ',') as promoter,
GROUP_CONCAT(promoters.avatar separator ',') as avatar
from events
inner join categories on events.category_id = categories.id
inner join event_dates on events.id = event_dates.event_id
inner join dates on event_dates.date_id = dates.id
inner join event_promoter on events.id = event_promoter.event_id
inner join promoters on event_promoter.promoter_id = promoters.id
where dates.startdate > now()
group by events.id
order by dates.startdate

关于mysql - 连接和排序来自不同表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49363149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com