MySQL min / max与连接表

时间:2013-07-25 19:10:50

标签: mysql sql mysqli

基本上我有一个搜索查询,可以成功获取我需要的所有结果。我还在检查所有行的计数(超出最后的查询限制),计算不同的类别ID,现在我只需要一个最小值/最大值,希望在同一个查询中。

我看到的问题是它来自加入的查询,所以我需要加入,匹配每个连接的id,然后检查我想要的最小/最大数字。

所以说我有20个结果,都有不同的“价格”,但价格在另一个表中,我想找到其他表中的最低和最高价格。我只需要一个min和max的结果,所以我不妨用我的计数查询添加它(因为它还必须绕过主查询的限制部分)。

对此有何想法?

这是一些额外的细节(主要查询加入)

$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(多个供应商)可能有多个结果,所以我只需要主查询的最低结果。为了稍微扩展我的问题,“max”需要是最高返回的“min”值,但这不太重要。

编辑:

这里有一些细节。

基本上每个产品都有50个供应商,我希望它们的最低价格都降到1个。

现在如果在最小加入后有1300个产品,那么也应该附加1300个价格,所以我想要最低找到价格的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

1 个答案:

答案 0 :(得分:2)

因此,您应按产品ID订购并选择MAX(价格),MIN(价格)。如果它不允许你在同一个sql声明中选择min和max,你可能需要做两个单独的查询。

对于前。

从产品加入中选择名称,最大(价格,最低价格) 客户在customer_fk = customer_id 按product_id订购(或在您的情况下为product_name)

我希望它现在可以帮助你;)