簡體   English   中英

將表行轉換成mysql中的列

[英]Table rows into columns in 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;

結果,我得到了所有行“重復”,如您在圖片中看到的

圖片

我如何避免這種情況,謝謝您的幫助

**注意**這是同一事件,因此每個事件應該只顯示1行。問題是我有3種多對多關系,所以變化的只是日期,度數和面積

您可以使用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`;

選擇時使用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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM