2012-07-10 6 views
0

У меня есть клиент, который хочет управлять его названиями/описаниями SEO для любой страницы на веб-сайте, поэтому я подумал о создании модуля, где он может ввести URL/TITLE/DESCRIPTION и сайт будет проверять, есть ли запись для этой страницы, и если есть, покажите ее.MySQL/PHP полнотекстовый поиск 1 слово сходство

Я попытался это:

$url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 

$q_seo = $conexio->query('SELECT modulseo.titol, modulseo.descripcio, MATCH(modulseo.url) AGAINST("'.$url.'") AS score FROM modulseo WHERE MATCH(modulseo.url) AGAINST("'.$url.'") ORDER BY score DESC LIMIT 0,1'); 

if(mysql_num_rows($q_seo)>0) 
{ 
    $d_seo = mysql_fetch_array($q_seo); 

    $titol = $d_seo['titol']; 
    $descripcio = $d_seo['descripcio']; 

} 
else 
{ 
    $titol = 'default title'; 
    $descripcio = 'default description'; 
} 

Это, очевидно, не работает, как я считаю, полнотекстовой поиск работает только с соответствующим разными словами, а не сходством между 1 словом и другим, так как клиент может войти в бэкэнд URLs нравится:

  • http://www.domain.com/index.php
  • или http://domain.com/index.php
  • или http://www.domain.com/index.php?language=fr
  • или http://domain.com/index.php?language=fr
  • и т.д ..

, а затем пользователь сайта может получить доступ к любому из этих адресов, так что должен быть способ, чтобы соответствовать любому из URL-адресов с любым из них клиент включен в бэкэнд.

Любая подсказка о том, как это сделать?

+0

почему вы не используете 'like', чтобы сделать поиск ?? – jcho360

ответ

0

Сделайте поиск с помощью LIKE %varible% Это медленный запрос, но он будет работать.

Вашего стол двигатель должен был быть MyISAM или если вы MySQL 5.6+ -v вы можете использовать InnoDB с полнотекстовым индексом

mysql> select * from test; 
+------+------+------------------------------+ 
| ids | name | last_name     | 
+------+------+------------------------------+ 
| 0 | 0 | http://domain.com/index.php | 
| 1 | 0 | http://domain2.com/index.php | 
| 2 | 0 | http://domain3.com/index.php | 
+------+------+------------------------------+ 
3 rows in set (0.00 sec) 

mysql> select * from test where last_name like '%http://domain.com/index.php%'; 
+------+------+-----------------------------+ 
| ids | name | last_name     | 
+------+------+-----------------------------+ 
| 0 | 0 | http://domain.com/index.php | 
+------+------+-----------------------------+ 
1 row in set (0.00 sec) 
+0

Потому что, если администратор добавляет «http: // domain.com/index.php» и пользователь просматривает «http: // www.domain.com/index.php», это не сработает, нет ? – Aleix

+0

Я думаю, что это сработает, даже если вы выполните поиск «% main%», он найдет его – jcho360

+0

Я отредактировал мой пост, я даже выполнил поиск с 'like '% //%';', и результат был правильно отображен – jcho360

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