Php 按零件od列文本排序查询结果
我有以下疑问:Php 按零件od列文本排序查询结果,php,mysql,joomla,Php,Mysql,Joomla,我有以下疑问: 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)
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
它正在按预期工作。但在“tabs”表中,我得到了“terms”列,其中包含文本格式的日期(每一行都是新行)。例如:
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
我要做的是修改查询,以便在“术语”列中按日期对元素排序。所以我想得到最接近当前时间的行(只能是第一行(第一个日期)。有什么办法可以做到这一点吗
我需要将单元格“terms”中的第一行拆分为from->to对,然后按“from dates”对所有行进行排序使用从您的表中选择replace(terms,'.','.','-'),其中1
您将获得18.05.2013
到18-05-2013
现在,您可以更改它以获得所需的结果。使用从您的_表中选择替换(术语“,”-”),其中1
您将获得18.05.2013
到18-05-2013
现在,您可以更改它以获得所需的结果。如果您按日期排序结果,则必须填写以下内容:
ORDER BY DATE(columnname) DESC
如果您按日期排序结果,则必须填写以下内容:
ORDER BY DATE(columnname) DESC
试试看
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);
你会得到应得的试试看
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);
您将获得应得的您可以通过和混合订购
如何使用:
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
您可以将订单与和混合
如何使用:
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
如果按datetime(时间戳)存储,或者使用int(并将日期与时间分开),那么为什么要将日期存储为字符串?如果按datetime(时间戳)存储,或者使用int,为什么要将日期存储为字符串(并将日期与时间分开),可以获得更好的结果(效率方面),您的问题也会消失。看起来您在varchar列中有两个日期作为一个范围,对吗?但我在一个单元格中有多个从日期到日期。按日期排序(整个单元格)不起作用:(哦,我没有想到这一点……但我认为在一列中存储从到日期无论如何都不是一个好主意。我知道这不是一个好主意……但我并没有创建这个……我的工作是修改这个查询,它并不是那么简单:(但我在一个单元格中有多个从到日期。按日期排序(整个单元格)将不起作用:(哦,我没有想到这一点……但我认为在一列中存储从到日期无论如何都不是一个好主意是的。我知道这不是一个好主意……但我没有创建这个……我的工作是修改这个查询,它不是那么简单:(你知道我怎样才能在每行中按第一个起始日期排序行吗?你知道我怎样才能在每行中按第一个起始日期排序行吗?这很有效!谢谢。你知道我怎样才能将结果限制为只包含日期>现在吗?你可以将此函数与
have
一起使用,例如have STR_to_date(SUBSTR,terms,0,10),“%d.%m.%Y”)>NOW()
但我不能通过……来使用订单,可以吗?不可以:)HAVING is子句检查此项您可以尝试将ith与WHERE一起使用,但我不确定它是否有效。您可以使用我作为别名编写的表达式,并在此别名上使用WHERE/HAVING。它有效!谢谢。您知道如何将结果限制为仅包含日期>现在吗?您可以将此函数与HAVING
一起使用,例如HAVING STR_to_DATE(SUBSTR(terms,0,10),“%d.%m.%Y”)>NOW()
但我不能通过使用…来使用ORDER,可以吗?否:)HAVING is子句检查此项您可以尝试将ith与WHERE一起使用,但我不确定它是否有效。您可以使用我作为别名编写的表达式,并在此别名上使用WHERE/HAVING。