2016-12-23 7 views
0

Iは、以下のようなテーブルがある -ソート値

Columns are like, 
Id, 
job_1 
comp_1 
date_1 
job_2 
comp_2 
date_2 
job_3 
comp_3 
date_3 

と日付がVARCHAR「1990分の4」等に記憶されています。

だから、その値を日付順に並べ替えたい。

私は以下のようなコードを使用している -

$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で

これはように次のようになります。私は、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") 

注:よう

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で行番号を配列キーに書き込んでいますが、これは実行可能な解決策の方向を指しているはずです。

さらに必要な場合は教えてください。

James