2012-12-18 103 views
1

当我搜索一个词“苹果”的剧本是显示按以下顺序结果:如何重新排序搜索结果?

(1)苹果树 (2)juiceapple (3)苹果

但我要重新排序的搜索结果按以下顺序:

(1)苹果 (2)苹果树 (3)juiceapple

正如你可以看到上面的命令正是我想其中的结果显示根据SE拱形的术语,是 “苹果”

//get date 
$button = $_GET['submit']; 
$search = $_GET['search']; 

if (!$button) 
    echo "Please fill out the form"; 
else 
{ 
    if (strlen($search)<=2) 
    echo "The item you searched for was to small"; 
    else 
    { 
    echo "You searched for <b>$search</b> <hr size='1'>"; 

    //connect to database 

    mysql_connect('localhost','wnumber','passowrd'); 
    mysql_select_db('wnumber'); 


//explode search term 
      $search_exploded = explode(" ",$search); 
      foreach($search_exploded as $search_each) 
{ 
    $str = mysql_real_escape_string(substr($search_each, 0, 4)); 
    //construct query 
    $x++; 
    if ($x==1) $construct .= "keywords LIKE '$str%'"; 
    else  $construct .= " OR keywords LIKE '$str%'"; 
} 




    //echo out construct 
    $construct = "SELECT * FROM word WHERE $construct"; 
    $run = mysql_query($construct); 
    $foundnum = mysql_num_rows($run); 

    if ($foundnum==0) 
     echo "No results found."; 
    else 
    { 

     echo "$foundnum results found.<p><hr size='1'>"; 

     while ($runrows = mysql_fetch_assoc($run)) 
     { 


     //get data 
     $meaning = $runrows['meaning']; 
     $keywords = $runrows['keywords']; 

     echo "<b>$keywords</b><br> 
     <b>$meaning</b><br> 

     } 

    } 



    } 
} 
+1

使用LIKE'苹果%'不符合juiceapple,但'%苹果%'将做 –

回答

1

除了升序如果你对长度的关注意味着尝试LENGTH()

$construct = "SELECT * FROM word WHERE $construct order by LENGTH(`keywords`) 
+0

但如果'关键字'列包含多个关键字,则会显示具有较少关键字(关键字列最短值)的行 – Buksy

2

使用ORDER BY ASC

$构建= “SELECT * FROM字,其中$构建ORDER BY [要从提升你的搜索字段名称] ASC” ;

+0

我替换行但页面显示错误警告:mysql_num_rows()期望param eter 1是资源,布尔在59给出 – user1835767

+1

@ user1835767尝试... $ con = mysql_connect('localhost','wnumber','passowrd'); mysql_select_db('wnumber',$ con); 而不是 mysql_connect('localhost','wnumber','passowrd'); mysql_select_db('wnumber'); – Abhi

+0

@ user1835767添加到你的行来自我自己的查询,它在这里工作正常。您在** [您想要提升您的搜索的字段名称]中输入了什么值** – freaky

1

使用ORDER BY keywords ASC它会给你预期的结果。

2

尝试

ORDER BY关键字升序

为了得到期望的结果

1

我假设你有多行关键字。您正在获取所有这些结果,因为您正在搜索包含单词apple的任何单词。

首先要获得准确的结果,然后只包含单词的结果,像这样做:

  1. 搜索结果相符完全字“apple”
  2. 搜索任何该结果包含单词“apple”

由于每行有多个关键字,因此不能使用=运算符。但是您必须在表格中使用一些separator以将关键字彼此分开。我们假设它的“”(空格)。

所以,如果你的表和列的“关键词”是这样的,例如

| id | name | keywords | 
| 1 | apple | apple fruit sweet | 

可以搜索这样的结果:

SELECT * FROM table t1 
WHERE 
keywords LIKE "% $keyword %" /* Notice whitespaces around the variable */ 
OR 
keywords LIKE "$keyword %" /* This is for keywords that arent separated from left */ 
OR 
keywords LIKE "% $keyword" /* This is for keywords that arent separated from right */ 

UNION DISTINCT /* Distinct is there because we want to show every result just once */ 

SELECT * FROM table t1 
WHERE 
keywords LIKE "%$keyword%" 

PS:分离器可以是任意的字符串或字符,它不必是空白