簡體   English   中英

多表上的MySQL關系

[英]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.

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