2016-12-23 2 views
0

У меня есть таблица, как показано ниже -значение Сортировка по дате значение в той же строке

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]; 
} 

Теперь, как я могу идти дальше, чтобы разобраться в этом на сегодняшний день?

+0

'mysql_query' (и другие с префиксом' mysql_') является устаревшим. Измените начальную логику – RomanPerekhrest

+0

См. Нормализацию. Названия нумерованных столбцов часто являются симптомами плохого дизайна. – Strawberry

+0

И fecth - не слово – Strawberry

ответ

0

Почему бы не поместить месяц после года как целое число в отдельный столбец массива? (Или это можно сделать в базе данных). Таким образом, как годы и дни подряд, вы можете сортировать по целочисленным значениям.

В 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 код, и я не уверен, почему вы записываете номер строки в свои ключи массива, но это должно указывать вам в сторону возможного решения.

Сообщите мне, если вам требуется что-либо еще.

Джеймс