【问题标题】:How to select statement for showing data [duplicate]如何选择用于显示数据的语句[重复]
【发布时间】:2025-12-23 17:50:14
【问题描述】:

我在mysql中有这样的表

-----------------------------
|id|warehouse_id|item_id|qty|
---|------------|-------|---|
|1 | 1          | 1     |10 |
|2 | 1          | 2     |23 |
|3 | 2          | 1     |45 |
|4 | 2          | 2     |66 |
|5 | 1          | 3     |44 |

如何使用 select 语句来显示我想要的表格

------------------------------------------
|id|item_id|qty warehouse 1|qty warehouse 2
---|-------|---------------|-------------
|1 | 1     | 10            |45         |
|2 | 2     | 23            |66         |
|3 | 3     | 44            |0          |

我正在尝试像这样使用雄辩的 laravel

ItemStockModel::get()

谢谢你

【问题讨论】:

  • 你只有两个仓库还是有几个??
  • 您应该为此使用 Join 查询。 laravel.com/docs/7.x/queries#joins
  • @scaisEdge 我有几个仓库,你能帮帮我吗?
  • 对于mysql中的几个仓库,你应该管理结果服务器端..(不是通过sql)
  • @scaisEdge 如果我只有两个仓库,请给我一个使用 sql 或 eloquent laravel 的例子

标签: mysql laravel eloquent


【解决方案1】:

如果你的sql只有2个仓库你可以试试

select distinct item_id, t1._qty qty_warehouse1, t2.qty qty_warehouse1
from my_table m
left  join  (
    select item_id, qty
    from my_table
    where warehouse_id = 1
) t1 on t1.item_id = m.item_id
left  join  (
    select item_id, qty
    from my_table
    where warehouse_id = 2
) t2 on t2.item_id = m.item_id

【讨论】:

  • 谢谢你,我很感激。如果我使用雄辩的 laravel 是否有可能
  • 我不是很有说服力,但我认为你可以使用原始查询
【解决方案2】:

您的要求是打破first normal form,这是不好的做法。

解决方案是在表中建立一个一对多的关系,以便 eloquent 可以查询结果并创建具有您想要的关系的对象。 让你的情况适应这个解决方案here

$item->qty_by_warehouses;

如果你不能修改表格,那么

你必须得到所有物品的id, 循环每一个并创建一个“each_id”对象并添加到一个结果列表中。

查询每个 id 以获取warehouse_id 和 qty 并将它们添加到列表中 将此列表添加到 each_id 对象。

这将得到相同的结果,就好像你有一对多关系的雄辩。

【讨论】: