![](/img/trans.png)
[英]Join three tables with primary key in one and foreign key in other two tables
[英]Connect three tables with foreign key and many to one
我有三張桌子
common_addons。
hotel_addons。
菜單
的ID common_addons
是foreign_key屬性的common_addons_id
在hotel_addons
和ID hotel_addons
是屬性的foreign_key hotel_addons_id
表menu
。
$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_id
表menu
common_addons
的name
。 屬性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.