gpt4 book ai didi

mysql - Codeigniter mysql查询连接3个表中的2个值

转载 作者:行者123 更新时间:2023-11-29 12:39:28 26 4
gpt4 key购买 nike

虽然我可以让连接正常工作,但它不会返回尽可能低的交易。结果应该是尽可能最低的手机价格和最低的每月费用。目前我可以获得最低的手机价格,但不能获得最低的每月费用,同样,我可以获得最低的每月费用,但不能获得最低价格的手机。

我有 3 个表 DEALS、TARIFFS 和 HANDSETS。当客户访问制造商产品列表页面时,它会加载与该制造商相关的所有产品(在大多数情况下大约 40 个产品)。我想要的是加载每种产品可用的最便宜的交易。关税表有超过4000条记录。手机表有3000多条记录。 Deals 表有超过 100 万条记录。

以下 3 个表以及相关列的表示:

                  Handset Table
==================================
id | manufacturer_id
-----------------------------------
100 1


Deals Table
==================================================
tariff_id | handset_id | handset_cost
--------------------------------------------------
15 100 44.99
20 100 114.99


Tariffs Table
==============================
id | monthly_cost
------------------------------
15 12.50
20 7.50

这是查询

$this->db->select('h.name, t.monthly_cost, d.handset_cost');
$this->db->from('aff_deals d');
$this->db->join('aff_tariffs t', 't.id = d.tariff_id', 'inner');
$this->db->join('aff_handsets h', 'h.id = d.handset_id', 'inner');

if (isset($manuid)) {
$this->db->where('h.manufacturer_id', $manuid);
}

$this->db->order_by('d.handset_cost ASC');
$this->db->order_by('t.monthly_cost ASC');

$this->db->group_by('h.name');

$query = $this->db->get();
$result = $query->result();

不幸的是,当我需要 44.99 英镑和 12.50 英镑时,这会返回 114.99 英镑的手机成本和 7.50 英镑的每月成本。上面的例子是一个简单的快照。我尝试过 MIN(d.handset_cost)、子查询但无法获得所需的结果。不知何故,我需要能够获得最低价格的手机,即使它是 0.00(免费),且每月费用相同。非常欢迎任何帮助。

最佳答案

根据您的查询,您滥用了Mysql的GROUP BY没有任何聚合函数的扩展,这将导致您的查询返回组中不存在的列的不确定结果,以您的查询为例,列 t.monthly_cost, d.handset_cost 值是不确定的,如果您具体是从每部手机的交易表中选择最小行,然后您可以使用以下查询

SELECT h.name,
t.monthly_cost,
d.handset_cost
FROM aff_deals d
INNER JOIN (SELECT handset_id,MIN(handset_cost) handset_cost
FROM aff_deals
GROUP BY handset_id) dd
ON d.handset_id = dd.handset_id AND d.handset_cost = dd.handset_cost
INNER JOIN aff_tariffs t ON t.id = d.tariff_id
INNER JOIN aff_handsets h ON h.id = d.handset_id
WHERE h.manufacturer_id =1
ORDER BY d.handset_cost ASC,t.monthly_cost ASC

See Demo

对于事件记录查询,很难复制上述(子选择)查询,但您可以通过 $this->db->query('your query') 直接运行此查询

关于mysql - Codeigniter mysql查询连接3个表中的2个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26317853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com