2012-11-21 150 views
0

我想我不明白'sort'是如何工作的,所以請不要評價我。我真的一整天都在搜索。mysql結果按數組排序

我有一個電影表與演員列。一個名爲「actors」的列。演員是由空間「」分隔的鏈接。鏈接的順序非常重要。

我爆炸的鏈接到一個數組,它看起來像[0] - > link0,[1] - >鏈接1,...

我的演員表,其中每個演員也都有它的電影鏈接。我不想做20個不同的SQL搜索,所以我做了一個變量與我想要的所有鏈接,像這樣(其中actor_link = link1 OR actor_link = link2 OR ..)

問題是這樣的。搜索可能會首先找到鏈接7,所以我的排序不見了。我能做些什麼來保持電影表中的順序。我想通過影片中的流行度顯示演員,而不是我的數據庫的順序。

你可以給我另一種方法來搜索演員而不進行'x'sql搜索並仍然保持順序嗎?

$actors[] = explode(" ", $row['actors_link']); 
$x=0; 
$actors2 = ''; 
while ($actors[0][$x]) { 
    $actors2 = $actors2 . "`link_imdb_actor` = " . "'".$actors[0][$x]."' OR "; 
    $x++; 
} 
$actors2 = substr($actors2, 0, -3); 

$sql = "SELECT * FROM `actors` WHERE $actors2"; 
$sql_result = mysql_query($sql) or die(" "); 
while ($row3 = mysql_fetch_array($sql_result)) { 
    echo $row3['link_imdb_actor']; 
} 

因此,電影「特蘭西瓦尼亞」酒店有亞當桑德勒,安迪薩姆伯格和賽琳娜戈麥斯。我的搜索顯示Selena Gomez,Andy Samberg,Adam Sandler,因爲這是我數據庫中的訂單。我如何根據actors數組的順序對sql結果進行排序?謝謝!

+1

你將不得不給我們一些代碼來看看,這很混亂 – Nathan

+1

你的數據庫設置是錯誤的。如果你想查詢某些東西,你不應該在列中放置多個項目。 – Arjan

+0

Arjan,如果你有300.000個電影標題和500.000個演員,你想象1000個用戶查詢數據庫時你的服務器將如何工作? – acerluc

回答

0

我需要你現有的代碼才能真正理解發生了什麼。

我會在您的查詢中提出一個建議。與其說WHERE actor_link = A或actor_link = B或actor_link = C這樣做,而不是:

WHERE actor_link IN (link1, link2, link3) 
1

爲了擴展阿爾揚的評論,如果你想成爲能夠實際使用的演員數據(例如,用它搜索)我會推薦至少兩張表。一個調用actorID,firstName和lastName字段的actor。另一個表格將是castID,actorID,movieID和castingOrder字段的鑄件。

然後,每個castingID將會將演員鏈接到電影 - 這可以方便地搜索特定演員或特定電影中每個演員的每部電影。

castingOrder字段可用於維護您想要的訂單。

+0

actors表已經存在,所以只需要castings表。或者其他一些鏈接actor_id和movie_id的表。 – Arjan