php - 如何使用查询构建器 Laravel 构建具有连接查询和子查询的复杂查询
问题描述
晚上好,我的程序员朋友们,
正如这个问题的标题所说,我有一个有点复杂的 mysql 查询,我正在尝试使用 Laravel 中的查询生成器将其写下来,但每次我尝试编写它时,我都会在到达子查询时停止。我会写下查询,也会让你知道查询会做什么。
SELECT
brands.name_en as brand_name_en,
brands.name_ar as brand_name_ar,
brands.brand_url as brand_url,
brands.description_ar as description_ar,
brands.description_en as description_en,
categories.name_en as category_name_en,
categories.name_ar as category_name_ar
FROM
brands
INNER JOIN categories ON brands.category_id = categories.id
WHERE
(brands.status = "1")
AND
(
brands.id IN (
SELECT
distinct(items.brand_id)
FROM
items
WHERE
items.in_stock = "1"
GROUP BY
(items.brand_id)
)
)
查询说明:
我有三张桌子:
- 品牌 (id,name,category_id)
- 类别(id、名称、brand_id)
- 商品(id、brand_id、in_stock、sold_date)
现在我想做以下事情:我想检索(品牌名称和类别名称)并根据上个月的最高销售额对它们进行排序
这是其中包含数据的表的示例:
Brands Table
------------
id name category_id
1 googleplay 1
Categories Table
--------------------------
id name brand_id
1 cards 1
items Table
-----------
id brand_id in_stock selling_date
1 1 0 null
1 1 1 2017-02-02 04:04:49
已经尝试了将近 2 天,但没有运气,因为当它到达子查询部分时它真的很复杂。
真心希望能得到各位的帮助。如果你们需要更多解释,请告诉我,我可能在写问题时忘记了一些东西。
先感谢您。
解决方案
如果你稍微改变一下你的 sql,你可以使用内部连接:
SELECT brands.name, categories.name
FROM brands
INNER JOIN categories ON brands.category_id = categories.id
INNER JOIN items ON categories.id = items.brand_id
WHERE brands.status = 1 AND items.in_stock = 1
把它翻译成 Laravel 很简单:
\DB::table('brands')
->join('categories', 'brands.category_id', '=', 'categories.id')
->join('items', 'brands.id', '=', 'items.brand_id')
->select('brands.name as brand', 'categories.name as category')
->where('brands.status', 1)
->where('items.in_stock', 1)
->get();
推荐阅读
- sql - 如何使用openjson交叉应用具有多个对象的json,例如: [{"id":"xxx","values":"xxx"},{"id":"zzz","values":"zzz" }]?
- python - 使用 AES_256 算法破译从 ping 身份到 python 烧瓶应用程序的 SAML 响应
- python - 如何使用python断言对象属性不存在?
- graphql - WordPress woocomerce graphql 失败
- export-to-csv - Powershell 中对多个 CSV 文件的单个查询结果
- c# - 以 Unity (2D) 的速度将对象移动到某个位置
- pointers - 依赖共享邮件服务器发送邮件的 VPS 上的 rDNS
- grafana - 在 grafana 中设置警报 | 百分位数与百分比
- c# - GetRequiredService 和 AddHttpClient 冻结 .NET 控制台应用程序(堆栈溢出)
- typescript - K6 测试执行行为