MySQL即时查询细化

时间:2017-05-02 07:16:31

标签: mysql

我有一个如下所示的查询:

$stmt = $conn->prepare("SELECT * FROM database.table WHERE (`status` = 'red' OR `status` = 'orange') ORDER BY `$orderby` $ad");

$ orderby方面到目前为止非常简单 - 从表中选择一个列名并使用它来对结果进行排序。到目前为止,选项包括lastModifiedreference

我被要求在此添加一个额外的字段作为一个潜在的选择,名为allocation,这是一个令人讨厌的字段,它包含两部分信息,其中只有一部分实际上是订单所需的。处理。这些选项可以是null或格式化:16/02/2017 - Sydney19/05/2017 - New York等等。

如何删除所有内容,以便按dd/mm/yyyy格式的日期排序,并在查询中丢弃- Location内容?我知道如何在PHP中完成它,但不是直接在MySQL查询中。它甚至可能吗?我猜它是某种方式......(希望)!

1 个答案:

答案 0 :(得分:1)

LOCATE()将返回第一个空格字符的位置,LEFT(str, n)将返回n的第一个str个字符。

ORDER BY LEFT(allocation, LOCATE(allocation, ' ')-1)

但是,您的日期格式不适合订购。 16/02/2017将在18/01/2017之前订购。您可以使用File Transfer Protocol specification将其解析为日期,然后按顺序进行排序。