2012-03-25 51 views
0

如何將PHP排序替換爲SQL?

$res = Query("SELECT * FROM `table` ORDER BY `date` DESC LIMIT 15"); 
SortArray(&$res, 'date', 'asc'); 

如果用言語形容,然後取數據的最後一部分,從數據庫中降序排列,而是給在升序排序的數據。

+0

你的問題很混亂。你只是想按升序對15個元素進行排序,或者你想按降序排列所有數據,但是按升序對前15個結果進行排序? – 2012-03-25 08:20:13

+0

按升序排序選擇最後15個條目。 – Ticksy 2012-03-25 09:13:22

回答

3

嘗試:

$res = Query("SELECT * FROM (SELECT * FROM `table` ORDER BY `date` DESC LIMIT 15) ORDER BY `date` ASC"); 
+0

正確的版本:SELECT * FROM(SELECT * FROM'table' ORDER BY'date' DESC LIMIT 15)as'res' ORDER BY'date' ASC – Ticksy 2012-03-25 08:35:27

0

可以使用功能,通過特定的按鍵排序的數組:

$res_array=array(); 
while($row=mysql_fetch_row($res)) 
    $res_array[]=$row; 

$new_arr = usort($res_array,"my_func"); 
function my_func($a, $b) 
{ 
    if ($a['date'] == $b['date']) { 
     return 0; 
    } 
    return ($a['date'] < $b['date']) ? -1 : 1; 
} 

*可能需要一些調試。接受這個想法。

+0

他問如何在SQL中進行排序而不是PHP。 – MichaelRushton 2012-03-25 07:17:39

+0

oops.sorry。只是從僞代碼中明白了 – lvil 2012-03-25 07:25:58

+0

@lvil像你這樣的東西已經可用:http://pastebin.com/Q3r6t1dP – Ticksy 2012-03-25 08:13:24

0

而不是做一些神奇的SQL查詢,你應該選擇15第一行以降序。然後從最後讀取結果。

$statement = $pdo->query('SELECT * FROM `table` ORDER BY `date` DESC LIMIT 15'); 
if (! $statement->execute()) 
{ 
    throw new Exception('query failed !'); 
} 

$data = $statement->fetchAll(PDO::FETCH_ASSOC); 
while ($row = array_pop($data)) 
{ 
    var_dump($row); 
} 
+0

集成到現有的代碼將是困難的... – Ticksy 2012-03-25 13:17:18

+0

@Ticksy,你可能注意到,有問題的沒有「現有的代碼」包括..因此沒有上下文。 – 2012-03-25 13:35:03

+0

您的變體是可能的,而是指在PHP中進行排序。 – Ticksy 2012-03-25 14:44:48