如何在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'];
}
由于
答案 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_DATE
或CASE 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
并使用mySQLi
或PDO
进行数据库处理。
答案 2 :(得分:0)
我强烈建议您使用时间戳值为时间的另一个字段,或者通过PHP将格式设置为上午/下午,因为它可能是服务器上的负载,需要大量执行for循环数据。
话虽如此,如果你想做一个for循环,你首先想要做一些像strtotime
这样的东西来得到一个数值(你可以在制作新数组后撤消它)。对于循环(转换后),我将其格式化为:
$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;
}