2013-05-17 63 views
1

假設我有一個mySQL數據庫:兩列:ID和名稱,有100行。 我想要做的是挑出10個名字 - 不重複 - 並以隨機順序顯示。Php MySQL非重複隨機數據顯示器

使用此代碼,我可以挑選出只有一個名字......

<?php 
include('connection.php'); 

$rand = rand(1, 100); 
$sql = "SELECT * FROM names WHERE ID=$rand"; 
$result = mysql_query($sql, $sandbox); 

while ($row = mysql_fetch_array ($result)) 
{ 
$name1 = $row['Name']; 
echo $name1 . "<br>"; 
} 

?> 

...這將是最好的代碼,讓我的10個隨機不重複的名字?

回答

0
$sql = "SELECT DISTINCT id, name FROM names ORDER BY RAND() LIMIT 10"; 
+1

而不是隻發佈一個SQL代碼片段,你能提供一個它在做什麼的描述,爲什麼?就目前來看,這個問題被標記爲低質量。 – Deanna

+0

它正在做Gregory Tippett所要求的:從數據庫中獲得10條隨機不重複記錄。我想這很清楚,所以在我的回答中不需要重複提問。 – sbxmal

0

你將要使用ORDER BY RAND()

$sql = "SELECT * FROM names ORDER BY RAND() LIMIT 10"; 
$result = mysql_query($sql, $sandbox); 

while ($row = mysql_fetch_array ($result)){ 
+0

聽起來不錯...那麼我該如何去顯示這些名字?

+0

就像你一樣:'while($ row = mysql_fetch_array($ result)) { $ name1 = $ row ['Name']; echo $ name1。 「
」; }' –

+0

啊,woops,錯過了一個分號。謝謝。 你會如何建議我將這與html集成,如果我想單獨設置每個名稱的樣式? (每個名稱都有唯一的CSS ID?) –

0

試試這個:

SELECT DISTINCT * FROM names ORDER BY RAND() LIMIT 10 
1

最簡單的方法(和最快的數據庫)將使用range生成10個的不同數字和shuffle函數,然後用IN子句創建一個查詢:

$numbers = range(1, 100); 
shuffle($numbers); 
$numbers = implode(', ', array_slice($numbers, -10)); 

$sql = "SELECT * FROM names WHERE ID IN ($numbers)"; 
// example query: 
// SELECT * FROM names WHERE ID IN (63, 76, 69, 59, 9, 84, 60, 18, 23, 62) 
1

根據表中的行數,你可能不希望做ORDER BY RAND()由其他4人的performance reasons建議:

的ORDER BY RAND()操作實際上每個重新查詢您的表的一行,分配一個隨機數字ID,然後提供結果。這對於超過500行的表格需要大量的處理時間。

推薦的方法將您的原始想法擴展到獲得10個ID併爲這些ID做一個簡單的選擇查詢。

如果它們是連續的,那麼您可以在該範圍內生成一個隨機數,或者檢索所有ID,隨機播放它們並請求前10個值。

this question有一些其他建議。