2010-07-12 146 views
0

我正在使用MySQL和'like'查詢來查找頁面。我需要能夠做的事情這樣,但是這也意味着這些頁面將是相同的:SQL'Like'導致重複內容

www.mysite.com/blog/hello-world

www.mysite.com/blog/hello -worl

他們都工作,並調出相同的頁面。如何(可能使用.htaccess?)我能解決這個問題嗎? :\

非常感謝

編輯:

PHP -

if(isset($_GET['title'])) { 
       $blogtitle=mysql_real_escape_string($_GET['title']); 
       $title_two = strtolower(str_replace("-", " ", $blogtitle)); 
       $title_two = strtolower(str_replace("?", "", $title_two)); 
       $title_two = mysql_real_escape_string($title_two); 

       $postmatch = "select * from blog where title LIKE '%".$title_two."%' LIMIT 1;"; 
       $postquery = mysql_query($postmatch) or die ("Could not match data because ".mysql_error()); 
       $blogtitle=mysql_result($postquery,0,"title"); 

       $title="$blogtitle"; 
+0

我們可以看一下你的SQL? – Borealid 2010-07-12 06:13:07

回答

0

好你的網址:www.mysite.com/blog/hello-world WHERE 你好世界是搜索字符串

我建議您將它們保存到數組一樣

$keyWrd = array(); 
$keyWrd = strtolower($_GET['keywd']); // MUST DO VALIDATION 
$keyWrd = explode(" ",$keyWrd); 
$TotalKeyVal = count($keyWrd); 

if(!empty($keyWrd[0])) 
    { 
     $SrcQryStr = "SELECT id,title,body FROM tbl_name WHERE"; 
     for($i=0;$i<$TotalKeyVal;$i++) 
      { 
       $SrcQryStr .= " title LIKE '%"; 
       $SrcQryStr .= $keyWrd[$i]; 
       $SrcQryStr .= "%'"; 

       $SrcQryStr .= ' OR '; 

       $SrcQryStr .= " body LIKE '%"; 
       $SrcQryStr .= $keyWrd[$i]; 
       $SrcQryStr .= "%'"; 

       if(($TotalKeyVal-1)!=$i) $SrcQryStr .= ' OR '; 
      } 
     $SrcQryStr .= " ORDER by created_date DESC"; 

現在您有$ SrcQryStr查詢字符串您可以在if(!empty($keyWrd[0]) && MORE HERE)上做更多的條件在這裏,您可以使用implode或多個implode而不是for循環。

現在爲什麼%$ keywd%

例:

STRING:歡迎堆棧溢出!

搜索關鍵字:。ACK

顯示找到匹配,因爲ACK在堆棧中發現WHILE%$ keywd%

不顯示找到匹配,因爲沒有字它以ack WHILE $ keywd開頭。%

不顯示找到匹配,因爲沒有確切的詞ACK 而$ keywd

1

你能提供一個原因,你需要做的是這樣?

您是否需要「he​​llo-world」和「hello-world123」來匹配,而不是「hello-worl」?

否則,我想不出任何理由你想使用LIKE,但不想讓「hello-worl」匹配。

+0

因爲爲了從數據庫中獲得更多的信息,我只能通過頁面標題來搜索數據庫。所以我需要首先獲得頁面的標題,並找到它對應的頁面...我使用$ _GET ['title'],並從那裏我想找到ID。 – Tim 2010-07-12 06:35:15

+0

好的,但如果網址中不存在id,爲什麼要'hello-world'和'hello-world123'匹配,而不是'hello-worl'。是什麼使他們特別?如果它是整個標題,那麼爲什麼使用LIKE? – 2010-07-12 06:48:21

1

爲什麼不替換此:

$postmatch = "select * from blog where title LIKE '%".$title_two."%' LIMIT 1;"; 

......這件事?

$postmatch = "select * from blog where title LIKE '$title_two' LIMIT 1;"; 

這樣,你仍然在搜索不管大小寫,但不匹配,不管周圍的字符。

+0

謝謝你,唯一的問題是,一些$ title_two的將在最後有一個問號或一些東西:\ – Tim 2010-07-12 07:49:12

+0

...然後他們不會匹配數據庫中的字段 – Tim 2010-07-12 07:55:02