[英]MySQL relation on multiple tables
我有以下表格:
Makes:
id - make_name
Models:
id - model_name - make_id
Trims:
id - trim_name - model_id
Forsale_Cars:
id - trim_id - year - price
我的問題是,如果用戶選擇(Make ID),我該如何返回該品牌下列出的所有裝飾並也存在於Forsale_Cars表中?
在Eloquent中,這將為您工作:
$make = Make::find($selectedId);
$trims = $make->trims()->has('forsales')->get();
// returns collection of Trim models that have related row in foresale_cars
// to also load the forsales models you can then do this (load on the collection):
$trims->load('forsales');
// or instead in one chain
$trims = $make->trims()->has('forsales')->with('forsales')->get();
您需要在Make
模型上具有以下關系:
public function trims()
{
return $this->hasManyThrough('Trim', 'Model');
}
其他關系,例如您上一個問題中的MySQL與多個表的關系
您要顯示修剪。 因此,從修剪中選擇。 您只想顯示Forsale_Cars中存在的裝飾,因此請使用EXISTS(如果考慮組合則使用INISTS)。 您只想顯示某些品牌的飾邊。 再次使用EXISTS(或IN),因為您可以這樣寫:在具有指定品牌的模型存在的位置(或該模型在該品牌的模型集中的位置)。
希望這可以幫助。 否則,請返回您得到的內容,以便我們為您提供更多建議。
如下所示在所有表之間進行聯接,這將為您提供匹配的行
select m.id as makeId,
t.id as trimid,
t.trim_name,
t.model_id
from Makes m
inner join Models mo
on m.id = mo.make_id
inner join Trims t
on t.model_id = mo.id
inner join Forsale_Cars fc
on fc.trim_id = t.id
你要
SELECT
*
FROM
Trims t
INNER JOIN -- it will get us only existing
Models m
ON
t.model_id = m.id
INNER JOIN
Forsale_Cars fc
ON
t.id = fc.trim_id
WHERE
m.make_id = <user input>
通過使用INNER JOIN,您將僅獲得Forsale_Cars中列出的現有裝飾。
目前還不清楚如何僅使用您提供的架構信息(表,屬性)來執行此操作。 如果您要向我們提供連接表的數據模型,則會更容易。 看到:
http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model
大概Models(make_id)是一個外鍵,它引用Trims和Forsale_Cars中的屬性。 您應該能夠加入這些表並選擇要查找的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.