2010-07-12 2 views
0

Я использую MySQL и запрос «как», чтобы найти страницы. Мне нужно, чтобы иметь возможность делать вещи таким образом, но это означает, что эти страницы будут такими же:SQL 'Like', вызывающий дублирующийся контент

www.mysite.com/blog/hello-world

www.mysite.com/blog/hello -worl

Они оба работают и воспитывают ту же страницу. Как (возможно, используя .htaccess?) Я могу обойти эту проблему? : \

Большое спасибо

EDIT:

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

ответ

0

Ну у вас есть URL-адрес: www.mysite.com/blog/hello-world ГДЕ привет мир является строка поиска

Я рекомендовал хранить их в массив как

$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 вместо цикла.

Теперь почему% $ keywd%

Пример:..

STRING: Добро пожаловать в Stack Overflow!

Искал слова:.. Ack

будет показать матч найден, потому что извед находится на стеке WHILE% $ keywd%

будет не показывать матч найден, потому что нет ни слова который начинается с ack WHILE $ keywd.%

это не показывает матча найдено, потому что нет точного слова изведа ПОКА $ keywd

1

Можете ли вы указать причину, почему вы должны сделать это таким образом?

Вам нужно «привет-мир» и «привет-мир123», чтобы соответствовать, но не «привет-worl»?

В противном случае я не могу думать о какой-либо причине, по которой вы хотели бы использовать LIKE, но не хотите, чтобы «hello-worl» соответствовал.

+0

Потому что для того, чтобы получить больше информации из базы данных, у меня есть только заголовок страницы для поиска в базе данных. Поэтому мне нужно сначала получить заголовок страницы и найти, на какой странице это соответствует ... Я использую $ _GET ['title'], и оттуда я хочу найти идентификатор. – Tim

+0

Хорошо, но если невозможно указать идентификатор в URL-адресе, почему вы хотите, чтобы «hello-world» и «hello-world123» соответствовали, но не «hello-worl». Что делает их особенными? Если это весь заголовок, то зачем использовать LIKE? –

1

Почему бы не заменить это:

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

... с этим?

Таким образом, вы по-прежнему выполняете поиск независимо от его заглавной буквы, но не соответствуете независимо от окружающих символов.

+0

Спасибо за это, только проблема в том, что некоторые из $ title_two будут иметь знак вопроса или что-то в конце: \ – Tim

+0

... и тогда они не совпадают с полем в базе данных – Tim

Смежные вопросы