基本上我有一个搜索查询,它成功地获取了我需要的所有结果。我还在检查所有行的计数(超出最后一个查询限制),对不同类别 ID 的计数,现在我只需要一个最小值/最大值,希望在同一个查询中。
我看到的问题是它来自一个连接查询,所以我需要加入,匹配每个连接的 id,然后检查我想要最小/最大的数字。
所以说我有 20 个结果,所有的“价格”都不同,但价格在另一张桌子上,我想从另一张桌子上找到最低和最高的价格。我只需要一个最小值和最大值的结果,所以我不妨将它与我的计数查询一起添加(因为它还必须绕过主查询的限制部分)。
对此有什么想法吗?
这是一些额外的细节(主要查询加入)
$query->join('LEFT','#__mrsp AS m
ON (t.name = m.name AND m.mrsp =
(SELECT min(mrsp) FROM #__mrsp WHERE name = t.name))');
name
在这种情况下是一个唯一的数值,所以它像 id 一样工作。这也是joomla
数据库语法。
我在此连接中选择最小值,因为一个 mrsp(多个供应商)可以有多个结果,所以我只需要最低的一个来进行主查询。为了稍微扩展我的问题,“最大值”需要是返回的最高“最小值”值,但这并不重要。
编辑:
这是更多细节。
基本上每个产品都有 50 个供应商,我希望它们的最低价格都降到 1。
现在,如果在最小加入后有 1300 种产品,也应该附加 1300 个价格,所以我想要 1 列用于最小找到价格,1 列用于最高找到价格。
这将导致结果显示任何结果将具有的最低价格,并且在您的搜索期间将具有最高价格和结果。
也就是说,如果每种产品有 50 个供应商,那么价格表将有 50*1300 行。我需要 1300 - 1300 行,因此初始最小值非常适合。
这是当前查询的构建:
SELECT
MAX(m.mrsp) max_price,
MIN(m.mrsp) min_price
FROM #__products t
LEFT JOIN #__mrsp m ON t.name = m.name
WHERE IF(t.width IS NOT NULL, IF(t.w_override, t.j_width, t.width), t.j_width) = 17
AND (t.publish_up = '0000-00-00 00:00:00' OR t.publish_up <= '2013-07-25 20:14:22')
AND (t.publish_down = '0000-00-00 00:00:00' OR t.publish_down >= '2013-07-25 20:14:22')
AND t.state = 1
ORDER BY t.id