0

我有以下查询:

SELECT t.*, c.alias as calias FROM jos2_tabs t
        JOIN jos2_tabs_category c on c.id=t.category_id
        WHERE (category_id = 43
                    OR category_id in (select id from jos2_tabs_category WHERE parentid = 43)
                    ) AND state=1 
        ORDER BY ordering2 

它按预期工作。但是在“选项卡”表中,我有“术语”列,其中包含文本格式的日期(每个都在新行中)。例子:

18.05.2013-21.07.2013
22.05.2013-20.06.2013
01.06.2013-25.08.2013
15.06.2013-25.08.2013
06.07.2013-29.09.2013
20.07.2013-29.09.2013
17.08.2013-10.11.2013
31.08.2013-10.11.2013
03.09.2013-30.09.2013

我要做的是修改查询以按“术语”列中的日期对元素进行排序。所以我想获得最接近当前时间的行(只能是第一行(第一个日期)。有什么想法可以实现吗?

我需要将单元格“术语”中的第一行拆分为从->到对,然后按“从日期”对所有行进行排序

4

4 回答 4

1

如果您按日期订购结果,则必须输入:

 ORDER BY DATE(columnname) DESC
于 2013-05-24T12:06:31.573 回答
1

试试看

SELECT t.*, c.alias as calias FROM jos2_tabs t
    JOIN jos2_tabs_category c on c.id=t.category_id
    WHERE (category_id = 43
                OR category_id in (select id from jos2_tabs_category WHERE parentid = 43)
                ) AND state=1         

然后您将获得所有行而无需订购

foreach($rows as $key=>row)
{
    $my_date = explode('-',$row['terms']);
    $from = $my_date[0];
    $to = $my_date[1];
    $order_arr[$key] = strtotime($from);
}
array_multisort($order_arr, SORT_ASC, $rows);
print_r($rows);

你会得到应得的

于 2013-05-24T12:07:48.260 回答
1

您可以将 Order by 与STR_TO_DATE()SUBSTR()混合使用

如何使用:

SELECT t.*, c.alias as calias FROM jos2_tabs t
JOIN jos2_tabs_category c on c.id=t.category_id
WHERE (category_id = 43
            OR category_id in (select id from jos2_tabs_category WHERE parentid = 43)
            ) AND state=1 
ORDER BY STR_TO_DATE(SUBSTR(terms, 0, 10),'%d.%m.%Y') ASC
于 2013-05-24T12:14:16.583 回答
0

使用select replace(terms,'.','-') from your_table WHERE 1你会18.05.2013得到18-05-2013

现在,您可以更改它以获得您想要的结果。

于 2013-05-24T12:05:31.910 回答