2013-07-29 51 views
0

乾草大家需要幫助IA小白升技的時候纔來的PHP :(排序電影由兩件事情

在我的數據庫,我有一個表叫電影,我有12列在那裏,但我用了2個collumns排序我的電影,有人稱今年另1 imdb_rating

這是我如何對它們進行排序

public function getRealMovies($lang=null, $p=null, $l=null, $sortby=null){ 
    $movies = array(); 

    if (($p) && ($l)){ 
     $start = ($p-1)*$l; 
     $limit = " LIMIT $start,$l"; 
    } else { 
     $limit = ''; 
    } 

    if (!$sortby || $sortby=='abc'){ 
     $order = "ORDER BY title ASC"; 
    } elseif ($sortby=='date'){ 
     $order = "ORDER BY date_added DESC"; 
    } elseif ($sortby=='imdb_rating'){ 
     $order = "ORDER BY imdb_rating DESC"; 
    } elseif ($sortby=='year'){ 
     $order = "ORDER BY year DESC"; 
    } 

    $e = mysql_query("SELECT * FROM movies WHERE id IN (SELECT movie_id FROM movie_embeds) $order $limit") or die(mysql_error()); 
    if (mysql_num_rows($e)>0){ 

     $ids = array(); 

     while($s = mysql_fetch_array($e)){ 
      $movies[$s['id']] = $this->formatMovieData($s, $lang); 
      $ids[] = $s['id']; 
     } 

     if (count($ids)){ 

      $flags = $this->getFlags($ids); 

      if (count($flags)){ 
       foreach($movies as $movie_id => $val){ 
        if (array_key_exists($movie_id,$flags)){ 
         $movies[$movie_id]['languages'] = $flags[$movie_id]; 
        } else { 
         $movies[$movie_id]['languages'] = array(); 
        }  
       } 
      } 
     } 

    } 
    return $movies; 
} 

是否有可能通過兩件事情,例如整理

 } elseif ($sortby=='imdb_rating and year'){ 
     $order = "ORDER BY imdb_rating and year DESC"; 

我希望有人能幫助

感謝

+0

它沒有工作,它只能通過imdb_rating排序,而不是按任何其他想法 –

回答

1

只是一個逗號單獨的順序列。

$order = "ORDER BY imdb_rating, year DESC"; 

你一定要考慮使用另一個MySQL擴展爲好,mysql_*已過時,使用mysqli_*PDO。我更喜歡PDO。

+0

我認爲如果您沒有定義'DESC',imdb_rating將被排序'ASC'。 –

+0

重寫規則是什麼,然後例如RewriteRule^/?tv-shows/imdb_rating index.php?menu = tv-shows&sortby = imdb_rating&lang = en [L] –

+0

@TobiasKun沒錯,我不確定他是否想要這兩列都是按照DESC排序的,但是如果這就是你想要的,只需將DESC添加到imdb_rating即可。 –

1

您必須稍微更改語法。

"ORDER BY imdb_rating DESC, year DESC"; 
1

更換and用一個簡單的逗號:

ORDER BY imdb_rating DESC, year DESC 
2

只是列用逗號分隔:或者

elseif($sortby == 'imdb_rating and year') 
{ 
    $order = 'ORDER BY `imbd_rating`, `year` DESC'; 
} 

,如果你想通過他們不同的順序(例如年,然後評級),使用:

ORDER BY `year` DESC, `imdb_rating` ASC 

還值得注意的是mysql_*函數集現在已被棄用。最好使用MySQLiPDO