多个表上的 MySQL 关系
Posted
技术标签:
【中文标题】多个表上的 MySQL 关系【英文标题】:MySQL relation on multiple tables 【发布时间】:2014-05-30 18:14:54 【问题描述】:我有以下表格:
Makes:
id - make_name
Models:
id - model_name - make_id
Trims:
id - trim_name - model_id
Forsale_Cars:
id - trim_id - year - price
我的问题是,如果用户选择(制造 ID),我如何返回该制造下列出的所有装饰并且也存在于 Forsale_Cars 表中?
【问题讨论】:
en.wikipedia.org/wiki/Join_%28SQL%29 【参考方案1】:在 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 relation with multiple tables
【讨论】:
再次感谢,如果我想从 Forsale 表中获取属于指定品牌的行,请再做一件事?再次感谢 检查编辑。您可以稍后在 qithload
或在同一个地方使用 with
非常感谢,请问在哪里可以阅读有关 laravel 的 elqouent 函数的更多信息? Laravel 官方文档并没有涵盖所有内容!
laravel.com/api/4.1 或 4.2 或直接使用您项目中的框架代码。【参考方案2】:
您想显示修剪。所以从修剪中选择。您只想显示 Forsale_Cars 中存在的装饰,因此请使用 EXISTS(或 IN,如果您在集合中考虑)。您只想显示某些品牌的装饰。再次使用 EXISTS(或 IN),因为您可以这样说:具有指定品牌的模型在哪里(或模型在该品牌的模型集中的哪里)。
希望这会有所帮助。否则,把你得到的回来,所以我们可以给你更多的建议。
【讨论】:
【参考方案3】:在下面的所有表之间进行连接,这将为您提供匹配的行
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
【讨论】:
【参考方案4】:你想要
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 中列出的现有装饰。
【讨论】:
【参考方案5】:目前还不清楚如何仅使用您提供的架构信息(表、属性)来执行此操作。如果您向我们提供连接您的表的数据模型,这将更容易。见:
http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model
大概 Models(make_id) 是一个外键,它引用了 Trims 和 Forsale_Cars 中的属性。您应该能够加入这些表格并选择您要查找的内容。
【讨论】:
以上是关于多个表上的 MySQL 关系的主要内容,如果未能解决你的问题,请参考以下文章