愛するオーバーフローの皆さん、こんにちは。いつものように、それは大歓迎です!:)
複数のカテゴリ (タグとして使用) を割り当てることができるイベント テーブルがあります。
次に、Categories (各タグを格納) と 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 で「Sport」タグを検索すると、次のように返されます。
**Events**
| id | event_name | tags |
+---------------------------------------------+
+ 1 | Basketball | sport
+ 3 | Bowling Charity Event | sport, charity
WHERE 条件なしでイベントを返す SQL の例: 次の SQL は、すべてのイベントを返し、カテゴリ (またはタグ) をグループ化します。これにより、私のDB構造のアイデアが得られるはずです。おそらく解決策に役立ちますか?
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
[x] のアクティビティ ID を使用してイベントを検索し、すべてのタグをグループ化してイベントの詳細を返す方法は次のとおりです。
関連付けられた 2 つの Activity_ID にリンクするイベント
| id | event_name | tags | activity_id |
+------------------------------------------------------------+
+ 3 | Bowling Charity Event | sport, charity | 2
どうもありがとう、もう一度!