我有一个如下所示的查询:
$stmt = $conn->prepare("SELECT * FROM database.table WHERE (`status` = 'red' OR `status` = 'orange') ORDER BY `$orderby` $ad");
$ orderby方面到目前为止非常简单 - 从表中选择一个列名并使用它来对结果进行排序。到目前为止,选项包括lastModified
和reference
我被要求在此添加一个额外的字段作为一个潜在的选择,名为allocation
,这是一个令人讨厌的字段,它包含两部分信息,其中只有一部分实际上是订单所需的。处理。这些选项可以是null
或格式化:16/02/2017 - Sydney
或19/05/2017 - New York
等等。
如何删除所有内容,以便按dd/mm/yyyy
格式的日期排序,并在查询中丢弃- Location
内容?我知道如何在PHP中完成它,但不是直接在MySQL查询中。它甚至可能吗?我猜它是某种方式......(希望)!
答案 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将其解析为日期,然后按顺序进行排序。