2

基本情報と Event.ID を含む Events テーブルがあります。

次に、「タグ」として使用している複数のカテゴリがあります。

Event_Categories (stores each 'tag')
 - id
 - name

Events_Categories (links tags to event ID)
 - event_id
 - event_category_id

イベント情報とすべてのタグを返す SQL クエリを実行する必要があります。

SELECT  * FROM `events`
 JOIN (`event_categories` 
 JOIN `events_categories` ON `event_categories`.`id` = `events_categories`.`event_category_id` )  
 ON `events`.`id` = `events_categories`.`event_id` 

個々のタグで「イベント」を複数回返します。

を追加するGROUP BY event_categories.nameと、個別のイベントが返されますが、タグは 1 つしか表示されません。

これはここでカバーされていると確信していますが、検索しても解決策が見つかりません。

ありがとう!

4

1 に答える 1

4

group_concat()カテゴリ名のリストを取得するために使用します。

SELECT e.*, group_concat(c.name)
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`;

編集:

タグがなくてもすべてのイベントを取得するための外部結合としてこれを行うには、 を次のように置き換えjoinますleft join

select e.*, group_concat(c.name)
from `events` e left join 
     `events_categories` ec
     ON e.`id` = ec.`event_id` left join
     `event_categories` c
     on ec.`event_category_id` = c.`id`
group by e.`id`;
于 2013-08-04T14:19:38.723 に答える