您好,亲爱的溢出者,希望我们有一些可供采摘的大脑;一如既往,非常感谢!:)
我有一个事件表,可以分配多个类别(用作标签):
然后我有类别(存储每个标签)和 Events_Categories(链接表)
**Events**
| id | event_name |
+------------+
+ 1 | Basketball
+ 2 | Children Charity Ball
+ 3 | Bowling Charity Event
**Event_Categories** (Stores Tags / Categories)
| id | name |
+------------+
+ 1 | sport
+ 2 | charity
+ 3 | other_tag
**Events_Categories** (Linking Table)
| event_id | event_category_id |
+-------------------------------+
+ 1 | 1
+ 2 | 2
+ 3 | 1
+ 3 | 2
以上总结
Basketball => Sports
Children Charity Ball => Charity
Bowling Charity => Charity & Sports
期望的结果
我希望能够搜索“运动”标签,这将返回所有具有该标签的事件。但是,它需要返回(和分组)与该特定事件关联的所有标签。
IE 搜索“运动”标签将返回:
**Events**
| id | event_name | tags |
+---------------------------------------------+
+ 1 | Basketball | sport
+ 3 | Bowling Charity Event | sport, charity
返回没有 WHERE 条件的事件的 SQL 示例: 以下 SQL 返回所有事件并对类别(或标签)进行分组。这应该让您对我的数据库结构有所了解,可能对解决方案有所帮助?
SELECT e.*, group_concat(c.name) as tags
FROM `events` e
JOIN `events_categories` ec
ON e.`id` = ec.`event_id`
JOIN `event_categories` c
ON ec.`event_category_id` = c.`id`
GROUP BY e.`id`;
附加问题(额外的布朗尼积分)
你能相信吗,他想要更多的帮助!!:)
此外,在链接表中,当事件链接到活动时,实际上还有另一个字段:
**Events_Categories** (Linking Table)
| event_id | event_category_id | activity_id |
+---------------------------------------------+
+ 1 | 1 | 1
+ 2 | 2 |
+ 3 | 1 | 2
+ 3 | 2 | 2
我将如何搜索活动 ID 为 [x] 的事件以返回事件详细信息,再次将所有标签分组:
链接到 2 个关联的 Activity_ID 的事件
| id | event_name | tags | activity_id |
+------------------------------------------------------------+
+ 3 | Bowling Charity Event | sport, charity | 2
非常感谢,再次!