簡體   English   中英

用外鍵連接三張表,多對一

[英]Connect three tables with foreign key and many to one

我有三張桌子

  1. common_addons。

  2. hotel_addons。

  3. 菜單

的ID common_addons是foreign_key屬性的common_addons_idhotel_addons和ID hotel_addons是屬性的foreign_key hotel_addons_idmenu

        $this->db->join('hotel_addons', 'hotel_addons.id = menu.addon_id');
        $this->db->join('common_addons', 'addons.id = hotel_addons.addons_id');
        $this->db->from('menu');
        $this->db->join('menu', 'menu.addon_id = hotel_addons.id');

我希望通過包含屬性hotel_addons_idmenu common_addonsname 屬性hotel_addons_id包含由逗號分隔(通過Implode函數)的hotel_addons的多個ids

這就是你現在所擁有的

menu
--------------
id                           1
hotel_addons_id              1,2,3,4

這不是“答案”,而是說明了ManyToOne和OneToMany如何實現ManyToMany

hotel_addons
--------------
id                           1        //one to many - one addon has many records in the bridge table

menu_hotel_addons  (bridge table)  = many to many
-------------------------
menu_id                        1     //many to one  - many bridge records point to the menu
hotel_addons_id                1     //many to one  - many bridge records point to the addons table

 menu
 --------------
id                           1     //one to many  - one menu has many records in the bridge table

在橋表中,主鍵是兩個外鍵的復合鍵,每個外鍵都是代理鍵(自動遞增)。

換句話說,菜單可以具有許多附加組件,並且附加組件可以屬於許多菜單項。 您現在擁有的方式是一個糟糕的破解方法,永遠無法滿足您的需求。

您不能加入以逗號分隔的列表(至少不容易)。 要做這樣的事情要容易得多:

     SELECT 
        m.*,
        a.*
     FROM
         menu AS m
     JOIN
          menu_hotel_addons AS ma
     ON 
        m.id = ma.menu_id
     JOIN
        hotel_addons  AS a
     ON
        ma.hotel_addons_id = a.id

等等...

暫無
暫無

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

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