[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: FULLTEXT поиск
MaximGQ
Здравствуете!
На одной странице форма с одним текстовым полем.
На второй есть код:

$search = $_POST['search'];
$array = explode(' ', $_POST['search']);

$words_to_delete = array('rug', 'Rug', 'RUG', 'collection', 'Collection', ' COLLECTION');
$array = array_flip($array);
$count_words = count($words_to_delete);
for ($i=0;$i<$count_words;$i++) {
unset ($array[$words_to_delete[$i]]);
}
$array = array_flip($array);
$search_array = implode(',',$array);

mysql_select_db($database_Rugs, $Rugs);
$query_s_results = "SELECT * FROM rugs WHERE MATCH (code, collection, name, `size`, `desc`, color) AGAINST ('$search_array')";
$s_results = mysql_query($query_s_results, $Rugs) or die(mysql_error());
$row_s_results = mysql_fetch_assoc($s_results);
$totalRows_s_results = mysql_num_rows($s_results);


Который дает такое дело "Illegal mix of collations for operation 'match'"
Если искать по любым полям по одиночке, например (code) или (collection) -все ищет. Если искать в (code, collection) говорит что не найден FULTEXT index.
А все строку вообще называет илигал. Есть у кого-то предложения лечения, чтоб это "легально" было?

Заранее спасибо)

 ! 

М
Выделяйте код тегами [php][/php]
Winston




Спустя 12 минут, 56 секунд (28.11.2011 - 23:47) Семён написал(а):
пробовал экранировать название своих колонок?

Спустя 38 секунд (28.11.2011 - 23:48) johniek_comp написал(а):
оформи код тегами
...

Спустя 24 минуты, 10 секунд (29.11.2011 - 00:12) MaximGQ написал(а):
Цитата (Семён @ 28.11.2011 - 20:47)
пробовал экранировать название своих колонок?

каким образом?

Цитата (johniek_comp @ 28.11.2011 - 20:48)
оформи код тегами

<?php ?>?? Хорошо, в след раз оформлю

Спустя 2 минуты, 13 секунд (29.11.2011 - 00:14) Семён написал(а):
Цитата
(`code`, `collection`, `name`, `size`, `desc`, `color`)

В итоге покажи какой запрос у тебя выполняется.

Спустя 2 минуты, 25 секунд (29.11.2011 - 00:16) MaximGQ написал(а):
Там еще проблема с кодировкой была в базе, все исправил на unicode, теперь дает только "Can't find FULLTEXT index matching the column list". Хотя в столбцах по одиночке ищет, а вместе никак. В базе fulltext индексы добавлены в необходимые поля

Спустя 3 минуты, 42 секунды (29.11.2011 - 00:20) MaximGQ написал(а):
Выполняется:
<?php
$query_s_results = "SELECT * FROM rugs WHERE MATCH (code) AGAINST ('$search_array')";
?>
А также:
<?php
$query_s_results = "SELECT * FROM rugs WHERE MATCH (сollection) AGAINST ('$search_array')";
?>
<?php
$query_s_results = "SELECT * FROM rugs WHERE MATCH (name) AGAINST ('$search_array')";
?>

Но не выполняется:
<?php
$query_s_results = "SELECT * FROM rugs WHERE MATCH (code, collection, name) AGAINST ('$search_array')";
?>

Спустя 6 минут, 56 секунд (29.11.2011 - 00:27) MaximGQ написал(а):
Я думаю проблема не в запросе а в таблице. Если я сразу fulltext не добавил, а после того как данными ее наполнил - в этом может быть проблема?

Спустя 8 минут, 2 секунды (29.11.2011 - 00:35) MaximGQ написал(а):
Я разобрался!
В базе данных, fulltext index надо добавлять сразу одновременно ко всем столбцам которые в MATCH, а не по отдельности. В phpMyAdmin нужно выбрать столбцы а потом внизу кликнуть иконку FULLTEXT. Если на сайте будут разные запросы с MATCH, то для каждого запроса нужно составлять свой индекс с полями которые соответственно используются в MATCH
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.