我有一个像下面的表格-
Columns are like,
Id,
job_1
comp_1
date_1
job_2
comp_2
date_2
job_3
comp_3
date_3
日期存储在varchar中,例如“ 4/1990”。
因此,我希望该值按日期排序。
我已经使用了下面的代码-
$sql=mysql_fecth_array(mysql_query("SELECT * FROM table"));
for($i=1;$i<=3;$i++){
$arr['job_'.$i]=$sql['job_'.$i];
$arr['comp_'.$i]=$sql['comp_'.$i];
$arr['date_'.$i]=$sql['date_'.$i];
}
现在,我如何进一步按日期排序?
最佳答案
为什么不将年份后的月份作为整数放在单独的数组列中? (或者这可以在数据库中完成)。这样,由于年和日是连续的,因此您可以对整数值进行排序。
在SQL中,将是这样:
CREATE TABLE dateTable (`date` CHAR(6));
INSERT INTO dateTable VALUES ('4/1990'), ('3/1989'), ('5/1991');
SELECT `date` FROM dateTable; # Not sorted
SELECT `date`, CONCAT(MID(`date`, INSTR(`date`, '/') + 1, 4), LEFT(`date`, INSTR(`date`, '/') - 1)) sortDate FROM dateTable ORDER BY CONCAT(MID(`date`, INSTR(`date`, '/') + 1, 4), LEFT(`date`, INSTR(`date`, '/') - 1)); # Sorted
在PHP中是这样的:
/* got this function from the following SO post: http://stackoverflow.com/questions/2699086/sort-multi-dimensional-array-by-value */
/* full credit to o0'. */
/* thanks! */
function aasort (&$array, $key) {
$sorter=array();
$ret=array();
reset($array);
foreach ($array as $ii => $va) {
$sorter[$ii]=$va[$key];
}
asort($sorter);
foreach ($sorter as $ii => $va) {
$ret[$ii]=$array[$ii];
}
$array=$ret;
}
$sql=mysql_fecth_array(mysql_query("SELECT * FROM table"));
for($i=1;$i<=3;$i++){
$arr['job_'.$i]=$sql['job_'.$i];
$arr['comp_'.$i]=$sql['comp_'.$i];
$arr['date_'.$i]=$sql['date_'.$i];
$slashPos = strpos($sql['date_'.$i], "/");
$arr['sortdate_'.$i]= (int)(substr($sql['date_'.$i], $slashPos + 1, 4) . substr($sql['date_'.$i], 1, $slashPos - 1));
}
aasort($arr, "sortdate")
请注意,我还没有尝试过PHP代码,也不确定为什么将行号写入数组键,但这应该为您提供可行的解决方案。
让我知道您是否还有其他要求。
詹姆士