我有以下查询:
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
我需要做的是修改查询以按“条款”列中的日期对元素进行排序。所以我想获得最接近当前时间的行(可能只是第一行(第一个日期)。任何想法我怎样才能实现这个目标?
我需要将单元格“条款”中的第一行拆分为from->对,然后按“from dates”对所有行进行排序
答案 0 :(得分:1)
如果您按日期订购结果,则必须输入:
ORDER BY DATE(columnname) DESC
答案 1 :(得分: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);
你将得到应得
答案 2 :(得分:1)
您可以将排序依据与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
答案 3 :(得分:0)
使用select replace(terms,'.','-') from your_table WHERE 1
您将获得18.05.2013
18-05-2013
。
现在,你可以改变它来获得你想要的结果。