多个表上的 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 表中获取属于指定品牌的行,请再做一件事?再次感谢 检查编辑。您可以稍后在 qith load 或在同一个地方使用 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 关系的主要内容,如果未能解决你的问题,请参考以下文章

MySQL join 与关系表上的匹配

MySQL - 计算多个表上的相关行数

多个表上的雄辩的自定义“属于”关系

多个表上的mysql group_concat

具有多个表的联结表上的 MySQL SELECT 查询

Mysql在同一张表上的多个左连接