Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按零件od列文本排序查询结果_Php_Mysql_Joomla - Fatal编程技术网

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。