2013-04-11 122 views
0

我在線上教程後創建了一個PHP/mysql搜索數據庫。每件事情都很好。我只想知道如何讓數據庫中的結果以隨機順序顯示。如何讓mysql數據庫ID隨機回顯?

當前結果按照數據庫中的ID號以數字順序顯示。我想知道如何隨機顯示結果?

使用$ id調用id。 這裏是PHP:

<?php 

$button = $_GET ['submit']; 
$search = $_GET ['search']; 

if(strlen($search)<=1) 
echo "Search term too short"; 
else{ 
echo "<h1>Dislpaying results for <b>$search</b> <hr size='1'></h1></br>"; 
mysql_connect("localhost","dobhgc767545ch2","jhjhghtyutuhjh"); 
mysql_select_db("doorcouhjhjh2"); 

$search_exploded = explode (" ", $search); 

foreach($search_exploded as $search_each) 
{ 
$x++; 
if($x==1) 
$construct .="keywords LIKE '%$search_each%'"; 
else 
$construct .="OR keywords LIKE '%$search_each%'"; 

} 

$constructs ="SELECT * FROM search WHERE $construct"; 
$run = mysql_query($constructs); 

$foundnum = mysql_num_rows($run); 

if ($foundnum==0) 
echo "Sorry, there are no matching result for <b>$search</b>.</br></br>1. 
Try more general words. for example: If you want to search 'how to create a website' 
then use general keyword like 'create' 'website'</br>2. Try different words with similar 
meaning</br>3. Please check your spelling"; 
else 
{ 

echo "$foundnum results found !<p>"; 

$per_page = 9; 
$start = $_GET['start']; 
$max_pages = $foundnum/$per_page; 
if(!$start) 
$start=0; 
$getquery = mysql_query("SELECT * FROM search WHERE $construct LIMIT $start, $per_page"); 

while($runrows = mysql_fetch_assoc($getquery)) 
{ 
$title = $runrows ['title']; 
$description = $runrows ['description']; 
$link = $runrows ['link']; 
$image = $runrows ['image']; 


echo " 
<div class=\"pagination\" style=\"display:inline\"><ul style=\"background-color:#\"><li><div  class=\"span3_search\"><div class=\"title_bg\"><h2><a href='$link'><b>$title</b> </a></h2></div><div class=\"result_img\"><a href='$link'><img id=\"result_img\" src=\"$image\" /></a> </div><div class=\"result_desc\"><p>$description</p></div><div class=\"result_link\"><br /> 
<a href='$link'>$link<br /><br /></a><p></div></div></li></ul></div> 
"; 


?> 
+3

**如果**其小數據集'ORDER by RAND()' – 2013-04-11 02:31:25

+0

Dagon將其作爲答案提交。 – 2013-04-11 02:32:56

+2

首先,在代碼中插入[sql注入攻擊](http://bobby-tables.com)洞。 – 2013-04-11 02:41:18

回答

4

,如果它是一個小的數據集,你可以使用MySQL的

ORDER by RAND() 

不這樣做在一個大的數據集,這是非常低效的

+0

我的目標是獲得10,000個結果。那麼什麼是有效的方法? – 2013-04-11 02:36:15

+2

10,000對於db來說很小,我不會擔心它。因爲你獲得的搜索結果不會以某種順序讓它們變得更具感覺而不是隨機的?您可能想查看[全文搜索](http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html)搜索,然後您可以按照Relevance – 2013-04-11 02:37:29

0
$constructs ="SELECT * FROM search WHERE $construct ORDER BY rand()";