【问题标题】:Does this MySQL Query have any hidden gotchas?这个 MySQL Query 是否有任何隐藏的陷阱?
【发布时间】:2011-01-13 02:20:49
【问题描述】:

我希望这不是一个非常迟钝的问题。我注意到 MySQL 会让我回溯到我的 GROUP 和 ORDER 中的“Mnth”字段。在我使用过的每个数据库引擎中,情况并非如此。任何人都可以确认这是一种可行的方法吗?

SELECT DATE_FORMAT(FROM_UNIXTIME(`swauditlogs`.`dateline`),'%Y-%m') AS Mnth, Count(`swauditlogs`.`ticketid`) AS Count
FROM swauditlogs LEFT JOIN swtickets ON swauditlogs.ticketid = swtickets.ticketid
WHERE swauditlogs.actionmsg Like 'Ticket status changed from:%to: Closed'
GROUP BY Mnth
ORDER BY Mnth DESC

【问题讨论】:

    标签: mysql phpmyadmin


    【解决方案1】:

    没关系。来自http://dev.mysql.com/doc/refman/5.0/en/select.html

    可以使用 AS alias_name 为 select_expr 指定别名。别名用作表达式的列名,可用于 GROUP BY、ORDER BY 或 HAVING 子句。

    我不喜欢那个 LIKE 子句。是不是有另一列可以测试,而不必对字符串执行 LIKE?

    【讨论】:

    • 真的!但是,这是一个预先确定的票务解决方案,所以我只是在使用那里的东西。此外,记录数以千计,用户加载它的速度非常低,因此文本比较不会残酷。但我同意,我无法想象他们在设计审计日志时的想法。
    【解决方案2】:

    这在 MySql 中是可以接受的:

    请看这里:http://dev.mysql.com/doc/refman/5.1/en/group-by-hidden-columns.html

    请注意,如果您尝试关注 标准 SQL,你不能使用 GROUP BY 子句中的表达式。你 可以通过以下方式解决此限制 为表达式使用别名...

    ...暗示您可以在 MySql 中使用表达式。

    【讨论】:

      【解决方案3】:

      我不知道任何 MySQL 内部结构,但我在我们的生产系统中使用了类似的查询,直到今天该查询还没有崩溃。所以这不是 MySQL 核心黑客的答案,只是我的观察。

      哦,我忘记了:免责声明: 仅仅因为我说我没有发现任何问题,并不意味着没有 ;-)

      【讨论】:

        【解决方案4】:

        恕我直言,查询对于 MySQL 来说看起来不错。

        标准 SQL 不允许在 WHERE 子句中引用列别名,但您可以在 GROUP BY、ORDER BY 或 HAVING 子句中使用别名来引用列。

        http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          • 1970-01-01
          • 2011-03-31
          • 1970-01-01
          • 2011-08-25
          • 1970-01-01
          相关资源
          最近更新 更多