在PHP中更改MySQL的记录顺序

时间:2014-08-26 01:40:26

标签: php mysql

如何在MySQL或While循环中按时间更改顺序?

我有一个像

这样的查询
`"SELECT `start-time` from `table_name`"`

我的开始时间格式为02:00 pm,02:00,05:00 am,同样。如果那只是没有上午/下午的号码,我可以使用order by。

或者,如果上述方法不可行,我可以使用PHP在while循环中命令开始时间吗?

我使用以下方式检索数据

$doquery = mysql_query("SELECT `start-time` FROM `table_name`");
while($fetch_query = mysql_fetch_array($doquery)){
echo $fetch_query['start-time'];
}

由于

3 个答案:

答案 0 :(得分:1)

您是否将时间存储为MySQL中的TIMESTAMP?如果不是,你应该是。对结果进行排序的最有效方法是在SQL语句中添加ORDER BY子句。例如,要进行排序以便最近的时间出现在结果集中,请尝试以下操作:

SELECT `start-time` FROM `table_name` ORDER BY `start-time` DESC;

要进行排序以便最近的时间出现在结果集的最后,请将查询更改为:

SELECT `start-time` FROM `table_name` ORDER BY `start-time` ASC;

我鼓励你探索的另一件事是PDO。不推荐使用所有mysql_ * PHP函数。准备好的查询更安全,更灵活。那里有很多教程......这个看起来没问题:http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html无论如何希望有所帮助。快乐的编码。

答案 1 :(得分:0)

如果它只是一个字符串,您可以使用STR_TO_DATECASE WHEN,例如:

使用 STR_TO_DATE

SELECT `start-time` from `table_name`
ORDER BY STR_TO_DATE(start-time,'%h.%i%p')

使用 CASE

SELECT `start-time` from `table_name`
ORDER BY
CASE WHEN start-time LIKE '%am%'
  THEN 0
  ELSE 1
END, start-time

我同意其他人您可以将其存储为TIMESTAMP并使用mySQLiPDO进行数据库处理。

答案 2 :(得分:0)

我强烈建议您使用时间戳值为时间的另一个字段,或者通过PHP将格式设置为上午/下午,因为它可能是服务器上的负载,需要大量执行for循环数据。

话虽如此,如果你想做一个for循环,你首先想要做一些像strtotime这样的东西来得到一个数值(你可以在制作新数组后撤消它)。对于循环(转换后),我将其格式化为:

免责声明:已经很晚了,我还没有在PHP中对此进行测试,但我在jQuery中有一个几乎相同的脚本进行排序。

$newArray = array();
for($i=0;$i<count(YOURARRAY);$i++){
if ($i=0){array_push($newArray,YOURARRAY[$i];
}
else {
for ($j=count($newArray);$j>=0;$k--{
if (YOURARRAY[$i]>$newArray[$j]){
array_splice( $newArray, $j, 0, $YOURARRAY[$i]);
}
}
print_r($newArray);

如果它有帮助(因为我因为没有时间运行它来看它是如何工作而感到内疚)这里有我可以轻松移植到PHP的jQuery。

function sortArray(data, reverse, orderBy){
    var returnArray = [];
    for (i=0;i<data.length;i++){
        if (i==0){
            returnArray.push(data[i])
        } else {
            j = i -1;
            if (data[i][orderBy] > returnArray[j][orderBy]){
                returnArray.push(data[i])
            } else {
                for (k=returnArray.length-1; k>=0; k--){
                    if (data[i][orderBy] > returnArray[k][orderBy]){
                        returnArray.splice(k+1, 0, data[i])
                        break
                    } else if (k == 0){
                        returnArray.splice(0, 0, data[i])
                    }
                }
            }
        }
    }
    if (reverse){
        returnArray.reverse()
    }
    return returnArray;
}