|
|
|
| Например есть слово и база существующих слов
вводим слово парламент - получаем
парламент
парламент
парламент
подсвеченные слова есть в базе нужно только проверить слово на их (слов из базы) вхождение в него и вывести с подсветкой на экран .
Для удобства можно фильтровать слова длиной равной или менее данного - понятно же что слово длиной 8 букв не может входить в слово длиной 7 или 5 букв
Есть идеи? | |
|
|
|
|
|
|
|
для: Port_Artur1
(04.06.2008 в 19:34)
| | можно перебирать все записи бвзы проверять с помощью strpos и потом подсвечивать вхождения $otvet = str_replace($zapros, "<b>".$zapros."</b>", $otvet);
А можно ли составить запрос к базе чтобы в результате сразу были слова входящие в искомое слово. Я просто не знаю поэтому спрашиваю может есть более простой способ чем перебор всех значений в базе. Просто значений в базе более 100000 и немного долго, учитывая что проверяемых слов на вхождение слов из базы порядка 2-3 тысяч. а надо чтобы оперативно. | |
|
|
|
|
|
|
|
для: Port_Artur1
(04.06.2008 в 21:29)
| | HELP! | |
|
|
|
|
|
|
|
для: Port_Artur1
(04.06.2008 в 22:26)
| | Мало того что медленно , ещё и не работает
$prefix = preg_replace("|[^\d\(\)-+]|", "", $prefix);
echo "<tt>$prefix<br/>\r\n</tt>";
dbConnect();
$result = mysql_query( "SELECT word FROM word" ) or error( mysql_error() );
$totalMsg = mysql_num_rows( $result );
echo ($totalMsg."c");
$i=1;
if( $totalMsg != 0 )
{
while( $row = mysql_fetch_array( $result ) )
{ $i++;
if (strpos($prefix,$row['word']) !== false)
{
$otvet = str_replace($row['word'], "<b>".$row['word']."</b>",$prefix);
// echo ($row);
echo ($otvet."x");
}
}
}
|
таблица создаётся и заполняется
$word = "CREATE TABLE word
(
id_word MEDIUMINT UNSIGNED NOT NULL auto_increment,
word VARCHAR(7) NOT NULL,
PRIMARY KEY (id_word)
)";
|
с таблицей всё нормально смотрел поле word заполнено во всех записях, а работать не хочет
на экране печатает только количество записей в базе - всё то что выбрали.
и больше ничего и очень очень медленно даже на localhost а через 30 секунд прерывается т.к. не хватает времени.
Неужели нельзя сделать быстрей, А? | |
|
|
|
|
|
|
|
для: Port_Artur1
(05.06.2008 в 10:45)
| | как оказалось работает но не доходит до результата поэтому и не печатает ничего.
Как ускорить процесс?
Помогите! | |
|
|
|
|
|
|
|
для: Port_Artur1
(05.06.2008 в 11:15)
| | а полнотекстовый поиск вас не устраивает? | |
|
|
|
|
|
|
|
для: KPETuH
(05.06.2008 в 11:34)
| | Мне нужно проверить не наличие слова подобного введённому в базе, А проверка слов из базы на вхождение в слово котороее вводит пользователь. Пример вверху.
Если укого есть примеры как это сделать быстро и качественно буду только благодарен! | |
|
|
|
|
|
|
|
для: Port_Artur1
(05.06.2008 в 11:36)
| | Насчет быстро не знаю, проверьте!
<?$string = "парламент";
$min_count = 3; //минимальное количество символов в слове
$max_count = strlen($string)+1; //максиальное количество символов в слове
if ($max_count > $min_count)
{
//составляем массив всех возможных слов, которые могут встериться в исходном слове
for ($count = $min_count; $count < $max_count; $count++)
for ($i=0; $i<strlen($string)-$count+1; $i++)
$part_array[] = '"'.substr($string, $i, $count).'"';
$part_string = implode(',', $part_array);
//получится
//"пар","арл","рла","лам","аме","мен","ент","парл","арла","рлам","ламе","амен","мент","парла",
//"арлам","рламе","ламен","амент","парлам","арламе","рламен","ламент","парламе","арламен",
//"рламент","парламен","арламент","парламент"
$query = mysql_query ("select word from word where word in ($part_string)") or die (mysql_error());
while ($qr = mysql_fetch_array($query))
{
$otvet = str_replace($qr[0], "<b>".$qr[0]."</b>",$string);
echo $otvet."<br>";
}
}?>
|
| |
|
|
|
|
|
|
|
для: olejek
(05.06.2008 в 12:04)
| | ! | |
|
|
|
|
|
|
|
для: Port_Artur1
(05.06.2008 в 11:36)
| | смотря как у вас база создана... полнотекстовым поиском можно проверить наличие части слова в слове.... | |
|
|
|
|
|
|
|
для: KPETuH
(05.06.2008 в 12:13)
| | olejek спасибо за пример скорость повысилась значительно хотя хочется ещё быстрее, но к сожалению результат такой
вводим - agrod
получаем что оно может состоять из двух слов - "agro","grod"
результат выборки из базы - 0 совпадений
А базе слво "agro" есть - 6-я запись из нескольких тысяч.
<?
dbConnect();
// echo $prefix;
$min_count = 4; //минимальное количество символов в слове
$max_count = strlen($prefix)+1; //максиальное количество символов в слове
if ($max_count > $min_count)
{
//составляем массив всех возможных слов, которые могут встериться в исходном слове
for ($count = $min_count; $count < $max_count; $count++)
for ($i=0; $i<strlen($prefix)-$count+1; $i++)
$part_array[] = '"'.substr($prefix, $i, $count).'"';
$part_string = implode(',', $part_array);
echo ($part_string."-");//получится
//"agro","grod"
// echo ($part_string);
$query = mysql_query ("SELECT word FROM word WHERE word in ($part_string)") or error (mysql_error());
// echo $query;
// $result = mysql_query( "SELECT word FROM word" ) or error( mysql_error() );
// $totalMsg = mysql_num_rows( $result );
// echo ($totalMsg."c");
$totalMsg = mysql_num_rows($query);
echo ($totalMsg."c");
// $i=1;
if( $totalMsg != 0 )
{
while ($qr = mysql_fetch_array($query))
{
$otvet = str_replace($qr['word'], "<b>".$qr['word']."</b>",$prefix);
echo "<tt>$otvet<br/>\r\n</tt>";
}
}
}
?>
|
Что то нигде не могу найти пример с этим оборотом
WHERE word in ($part_string)
|
Хотя и ошибок не выдаёт! | |
|
|
|
|
|
|
|
для: Port_Artur1
(05.06.2008 в 13:35)
| | Ну не знаю, не знаю. У меня такой код вывел:
"agr","gro","rod","agro","grod","agrod"-1cagrod
Ищите ошибку в другом месте, может при передаче переменных.
Из справочника MySQL:
expr IN (value,...)
Returns 1 if expr is equal to any of the values in the IN list, else returns 0.
If all values are constants, they are evaluated according to the type of expr and sorted.
The search for the item then is done using a binary search.
This means IN is very quick if the IN value list consists entirely of constants.
Otherwise, type conversion takes place according to the rules described in Section 10.2.2,
“Type Conversion in Expression Evaluation”, but applied to all the arguments.
mysql> SELECT 2 IN (0,3,5,7);
-> 0
mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');
-> 1
|
| |
|
|
|
|
|
|
|
для: olejek
(05.06.2008 в 14:09)
| | нашёл ошибку оказывается длина слов в базе из 4 букв = 5 , видимо в конце или пробел или ещё что то
$fm=file('file.txt');
foreach ($fm as $value){
mysql_query( "INSERT INTO word ( word )
VALUES ( '$value')" )
or error( mysql_error() );
}
|
Как избавиться от лишних символов при создании базы? | |
|
|
|
|
|
|
|
для: Port_Artur1
(05.06.2008 в 15:29)
| | Используйте функцию trim() | |
|
|
|
|
|
|
|
для: olejek
(05.06.2008 в 15:34)
| | Перед последним сообщением также использовал эту функцию, но база отказывалась создаваться почему не знаю.
А сейчас всё нормально работает.
Щас займусь дальнейшей доработкой идеи.
Огромное Вам спасибо за помощь! | |
|
|
|
|
|
|
|
для: Port_Artur1
(05.06.2008 в 16:22)
| | Всё работает,
но может можно что-то подправить в коде что-бы работало быстрее
а то иногда не укладывается в 30 секунд,
а надо бы побыстрее. | |
|
|
|
|
|
|
|
для: Port_Artur1
(06.06.2008 в 10:54)
| | Спасибо всё устраивает, так как упростил в другом месте, а в этом теперь быстрее звука! | |
|
|
|