【问题标题】:Selecting value corresponding with MAX value of a group选择与组的 MAX 值对应的值
【发布时间】:2013-12-04 13:29:56
【问题描述】:

我正在尝试获取我的 OXSEO 表的 OXSEOURL。

结构:
oxobjectid |牛瑟尔 | oxparams

数据:
http://imageshack.com/a/img268/7443/3xr4.png
http://imageshack.com/a/img42/315/8bdu.png
我最深的 SEO URL 总是在 OXPARAMS 字段中具有更高的值。
只有数值,其他的从不计算..

返回应该是:

http://imageshack.com/a/img29/8404/4jbv.png

我昨天找到了一个解决方案,但是速度很慢,现在我正在尝试一种更快的方法。
所以我想获得具有最大 oxparams 值的相同 oxobjectid 的 oxseourl。
我有超过 330.000 行,所以每毫秒都很重要..

我只需选择以“tbproduct_”objectid 开头的产品的网址。

我的查询:

SELECT seo2.oxseourl, seo2.oxobjectid, seo2.oxparams
FROM oxseo AS seo2
JOIN (
      SELECT oxobjectid, 
          MAX(oxparams) AS maxparam
      FROM    oxseo
      GROUP BY
          oxobjectid
     ) AS usm
     ON usm.maxparam = seo2.oxparams
WHERE seo2.oxobjectid LIKE '%tbproduct_%'
    AND seo2.oxparams REGEXP '^-?[0-9]+$'

但这会为产品返回相同的行。

感谢您的帮助。

【问题讨论】:

  • 你是不是错过了你的 JOIN 条件的一部分!?!
  • 你指的是哪一部分?
  • 如果 oxobjectid 以tbproduct 开头,那么您可以使用WHERE seo2.oxobjectid LIKE 'tbproduct_%',它允许使用索引。
  • 将seo2的objectid与usm的objectid关联的位
  • 但实际上第一步需要整理您的数据。尝试以这种方式进行搜索将非常低效 - 并且容易导致错误。

标签: mysql oxid


【解决方案1】:

稍作优化,速度更快:

SELECT seo.oxseourl, seo.oxobjectid, MAX(seo.oxparams)
FROM oxseo AS seo
WHERE seo.oxobjectid LIKE 'tbproduct_%' AND seo.oxparams REGEXP '^-?[0-9]+$'
GROUP BY seo.oxseourl, seo.oxobjectid

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2012-01-13
    • 2021-10-06
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2010-12-24
    相关资源
    最近更新 更多