2016-03-08 9 views
1

列說我有類似以下內容的數據庫:錶行到mysql中

表events_degree:

event_id  degree_id 
    1   1 
    1   31 
    ...   ... 

表events_area:

event_id  area_id 
    1   1 
    1   31 
    ...   ... 

表events_schedule:

event_id  schedule 
    1   Time 1 
    1   Time 2 
    ...   ... 

桌子事件:

id   name 
    1   prom 
    2   homecoming 
    ...   ... 

表度:

id   name   shortened 
    1  computer science  cs 
    2  something else   se 
    ...   ...    ... 

表面積:

id   name 
    1   hall 1 
    2   gym 
    ...   ... 

建表:

id   name 
    1   main building 
    2  second building 
    ...   ... 

我想這樣做,是因爲我合併的列是什麼有這個查詢

SELECT `e`.*, `eh`.`start_date`, `eh`.`end_date`, `c`.`name` AS `degree_name`, `c`.`shortened` AS `shortened_degree`, `ai`.`name` AS `area_name`, `ed`.`name` AS `building_name` 
FROM `events` `e` 
LEFT JOIN `event_schedule` `eh` ON `e`.`id` = `eh`.`event_id` 
LEFT JOIN `event_degree` `ec` ON `e`.`id` = `ec`.`event_id` 
LEFT JOIN `degree` `c` ON `c`.`id` = `ec`.`degree_id` 
LEFT JOIN `event_area` `ea` ON `e`.`id` = `ea`.`event_id` 
LEFT JOIN `area` `ai` ON `ai`.`id` = `ea`.`area_id` 
LEFT JOIN `building` `ed` ON `ed`.`id` = `ai`.`building_id` 
WHERE `e`.`active` = '1' 
AND `eh`.`start_date` >= '2016-03-08' 
AND `eh`.`end_date` < '2016-07-01' 
ORDER BY `eh`.`fecha_inicio` ASC; 

,結果我得到的所有行「複製」,你可以在圖片

picture

我怎樣才能避免這種情況,感謝您的幫助

看到* *注** 這是同一個事件,所以它應該只顯示每行1行問題是我有3多對多關係 所以改變的事情只有日期,度和區域

+2

鮮明/組。 – sagi

回答

2

您可以通過使用GROUP BY

SELECT DISTINCT `e`.*, `eh`.`start_date`, `eh`.`end_date`, `c`.`name` AS `degree_name`, `c`.`shortened` AS `shortened_degree`, `ai`.`name` AS `area_name`, `ed`.`name` AS `building_name` 
FROM `events` `e` 
LEFT JOIN `event_schedule` `eh` ON `e`.`id` = `eh`.`event_id` 
LEFT JOIN `event_degree` `ec` ON `e`.`id` = `ec`.`event_id` 
LEFT JOIN `degree` `c` ON `c`.`id` = `ec`.`degree_id` 
LEFT JOIN `event_area` `ea` ON `e`.`id` = `ea`.`event_id` 
LEFT JOIN `area` `ai` ON `ai`.`id` = `ea`.`area_id` 
LEFT JOIN `building` `ed` ON `ed`.`id` = `ai`.`building_id` 
WHERE `e`.`active` = '1' 
AND `eh`.`start_date` >= '2016-03-08' 
AND `eh`.`end_date` < '2016-07-01' 
GROUP BY `your_id`; 
+0

謝謝!爲你的幫助 –

+1

我的榮幸。 :) –

0

使用DISTINCT同時選擇

SELECT DISTINCT `e`.*, `eh`.`start_date`, `eh`.`end_date`, `c`.`name` AS `degree_name`, `c`.`shortened` AS `shortened_degree`, `ai`.`name` AS `area_name`, `ed`.`name` AS `building_name` 
FROM `events` `e` 
LEFT JOIN `event_schedule` `eh` ON `e`.`id` = `eh`.`event_id` 
LEFT JOIN `event_degree` `ec` ON `e`.`id` = `ec`.`event_id` 
LEFT JOIN `degree` `c` ON `c`.`id` = `ec`.`degree_id` 
LEFT JOIN `event_area` `ea` ON `e`.`id` = `ea`.`event_id` 
LEFT JOIN `area` `ai` ON `ai`.`id` = `ea`.`area_id` 
LEFT JOIN `building` `ed` ON `ed`.`id` = `ai`.`building_id` 
WHERE `e`.`active` = '1' 
AND `eh`.`start_date` >= '2016-03-08' 
AND `eh`.`end_date` < '2016-07-01' 
ORDER BY `eh`.`fecha_inicio` ASC;