【问题标题】:Subquery in ON clause Laravel ORMON 子句 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 表中有这些数据,因为我有字段idbuilding_idlevel,其中building_idlevel 是唯一的。我只能在ingame_buildings 中拥有building_id,它引用buildings.id 字段。
  • 感谢您的澄清,据我了解building_idbuildingsingame_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 中唯一行的外键。看下面的答案,后面我会添加雄辩的查询。

标签: sql laravel orm eloquent laravel-5.1


【解决方案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 兄弟! :)
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 2017-04-18
  • 2020-07-06
  • 2021-09-18
  • 2017-11-12
相关资源
最近更新 更多