【发布时间】:2020-09-21 12:22:09
【问题描述】:
对于使用 CI4 的模型并努力调整我现有的 MySQL JOIN 查询以使用其用户指南中的示例真的很陌生。
我已经像这样修改了我的部分代码:
public function brand_name($brand_name_slug)
{
return $this->asArray()
->where('availability', 'in stock')
->where('sku !=', '')
->where('brand_name_slug', $brand_name_slug)
->groupBy('gtin')
->orderBy('brand_name, subbrand_name, product, size, unit')
->findAll();
}
它工作正常。我查看了示例,发现我可以添加代码 ->table('shop a') 并且它仍然有效,但我还需要添加以下 JOIN 语句:
JOIN (SELECT gtin, MIN(sale_price) AS sale_price FROM shop GROUP BY gtin) AS b ON a.gtin = b.gtin AND a.sale_price = b.sale_price
我一添加->join('shop b', 'a.gtin = b.gtin and a.sale_price = b.sale_price'),就会收到“404 - 找不到文件”错误。
当我查看 CI4 连接的所有示例并调整我的代码以适应时,我的 foreach($shop as $row) 循环会生成一个“糟糕...”错误,因为它们以 getResult() 或 getResultArray 结尾 - 而不是 @987654328 @。
这是前进的方向,我是否需要更改我的 foreach 循环。
完整的 MySQL 语句:
SELECT * FROM shop a JOIN (SELECT gtin, MIN(sale_price) AS sale_price FROM shop GROUP BY gtin) AS b ON a.gtin = b.gtin AND a.sale_price = b.sale_price WHERE availability = 'in stock' AND sku != '' AND brand_name_slug = $brand_name_slug GROUP BY gtin ORDER BY brand_name, subbrand_name, product, size
【问题讨论】:
-
永远不要使用
SELECT * -
此外,在没有任何聚合函数的情况下,GROUP BY 子句永远不合适。如果你想要不同的结果,我会说总是使用 DISTINCT,但显然,在
SELECT *的上下文中,DISTINCT 是荒谬的,所以你必须弄清楚你真正想要什么。
标签: mysql codeigniter join query-builder codeigniter-4