ON 子句 Laravel ORM 中的子查询
Posted
技术标签:
【中文标题】ON 子句 Laravel ORM 中的子查询【英文标题】:Subquery in ON clause Laravel ORM 【发布时间】:2015-11-27 03:40:08 【问题描述】:如何在 Laravel ORM 中创建此查询?
SELECT b1.* FROM `buildings` b1 INNER JOIN `buildings` b2 ON b2.`id` IN (SELECT `id` FROM `ingame_buildings`) WHERE b1.`level` > b2.`level`
我尝试在->join()
做:
function()
return implode(',',IngameBuilding::get());
但它不起作用。
【问题讨论】:
您的原始查询对我来说没有意义。您实际上是在尝试SELECT * FROM buildings where id IN ( SELECT id FROM ingame_buildings)
,并且在数据集中,您想比较level
列吗?
@yangqi - 我有两个专栏。第一个 - buildings
包含游戏中可用的所有建筑模板 - 第二个 - ingame_buildings
我放置数据的地方,关于当前城市的已建建筑物。我想找到所有可用的升级 - 我在buildings
表中有这些数据,因为我有字段id
、building_id
和level
,其中building_id
和level
是唯一的。我只能在ingame_buildings
中拥有building_id
,它引用buildings.id
字段。
感谢您的澄清,据我了解building_id
在buildings
和ingame_buildings
表中都有,但它们代表不同的含义?
简单来说,我有建筑:市政厅。这栋楼有3层。所以我在buildings
中有接下来的 3 个字段:(id, building_id, level): (12, 1, 1), (34, 1, 2), (56, 1, 3)
- 并且id
字段是主键 ofc。玩家建造建筑物的地方,简单来说有市政厅 1 级,ingame_buildings
有:(id, building_id, owner_id): (1, 12, 1)
但是当基地有 3 级时,我有(1, 56, 1)
:)
好的,我知道了。 building_id
在两个不同的表中确实令人困惑。建筑物中的那个标识一个唯一的建筑物,但ingame_buildings
中的那个是标识buildings
中唯一行的外键。看下面的答案,后面我会添加雄辩的查询。
【参考方案1】:
这是获取建筑物中所有级别高于ingame_buildings
中现有建筑物级别的记录的查询
SELECT * FROM buildings
JOIN (
SELECT a.building_id, b.level
FROM ingame_buildings as a
JOIN buildings as b ON a.building_id=b.id
)
AS ingame_level ON ingame_level.building_id=buildings.id
WHERE buildings.level > ingame_level.level
【讨论】:
在ingame_level.building_id=buildings.id
的情况下,您应该使用buildings.building_id
进行正确的工作,但是非常感谢您的mutch 兄弟! :)以上是关于ON 子句 Laravel ORM 中的子查询的主要内容,如果未能解决你的问题,请参考以下文章
未找到列:Laravel 5 多对多关系查询中“on 子句”中的 1054 未知列“managers.id”
Laravel ORM 选择查询函数 load() on null