2016-12-23 1 views
0

Ich habe eine Tabelle, wie unten -Sortieren Wert nach Datum Wert in derselben Zeile

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

und Datum wird in varchar wie '4/1990' gespeichert.

Also möchte ich diesen Wert nach Datum sortiert.

ich unten Code wie verwendet haben -

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

Nun, wie kann ich dies weiter nach Datum sortieren vorgehen?

+0

'mysql_query' (und andere mit dem Präfix' mysql_') ist veraltet. Ändern Sie Ihre ursprüngliche Logik – RomanPerekhrest

+0

Siehe Normalisierung. Aufzählungsspaltennamen sind oft symptomatisch für schlechtes Design. – Strawberry

+0

Und Fecth ist kein Wort – Strawberry

Antwort

0

Warum platzieren Sie den Monat nach dem Jahr nicht als Integer in einer separaten Arrayspalte? (Oder dies könnte in der Datenbank getan werden). So wie Jahre und Tage aufeinander folgen, können Sie die ganzzahligen Werte sortieren.

In SQL würde dies als so sein:

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 

Und in PHP als so:

/* 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") 

Bitte beachte, dass ich nicht den PHP-Code versucht haben, und ich bin nicht sicher, warum Sie schreiben die Zeilennummer in Ihre Array-Schlüssel, aber dies sollte Sie in die Richtung einer möglichen Lösung weisen.

Lassen Sie mich wissen, wenn Sie etwas weiter benötigen.

James