Помощник
|
Скрипт поиска по сайту |
Kuchuluk
|
Сообщение
#1
|
||
|
|
||
|
|||
fedornabilkin |
8.4.2013, 10:29;
Ответить: fedornabilkin
Сообщение
#2
|
|
У тебя в фориче $value, а вставляешь ты в запрос $svalue, скорее всего поэтому.
Но я делал вот так однажды //=== search if( $_POST['action'] == 'search' ){ $search = $_POST['search']; $search = trim($search); // пробелы слева, справа $search = substr($search, 0, 20); // порезать $search = addslashes($search); // экранирование $search = htmlspecialchars($search); // тэги if( $search == '' OR strlen($search) < 2 ){ exit("Начните вводить запрос"); } $search = '*' . $search . '*'; $sql = "SELECT * FROM `users` WHERE MATCH(`soname`, `name`) AGAINST('$search' IN BOOLEAN MODE)"; $query = $db->query($sql); if( $db->num_rows($query) > 0){ while( $row = $db->get_row($query) ){ $html .= '<a href="/udata/'.$row['id'].'/">'.$row['soname'].' '.$row['name'].'</a>'; }// exit($html); }else{ exit("Нет результатов"); //exit($sql); } } Но у меня заточено под ajax, поэтому смотри на сам запрос. |
|
|
matroskin8 |
8.4.2013, 11:08;
Ответить: matroskin8
Сообщение
#3
|
|
почему между %% ничего нет? С кавычками в этих двух строках разберитесь: $sql_text .= 'first_name LIKE "%'.$svalue.'%" OR login LIKE "%'.$svalue.'%" or '; ... $sql_text = preg_replace('# or $#', '', $sql_text); Запрос - в двойных кавычках, строковые значения - в одинарных. В том числе и маркеры (%) должны быть заключены в одинарные кавычки, поскольку являются составляющими значения. Где-то так примерно должно выглядеть: $sql_text .= "first_name LIKE '%{$svalue}%' OR login LIKE '%{$svalue}%' or "; ... // то же самое и дальше А вообще, полнотекстовый поиск работает на порядок быстрее, благодаря использованию индексов, каковые не использует оператор LIKE. |
|
|
isvetlichniy |
8.4.2013, 12:56;
Ответить: isvetlichniy
Сообщение
#4
|
|
почему между %% ничего нет? ответ однозначно в $value и $svalue будь внимательнее |
|
|
Kuchuluk
|
Сообщение
#5
|
|
С кавычками в этих двух строках разберитесь: спасибо, исправил. теперь вызываю этот метод на странице if (isset($_POST["search"])) { $f = $base->search(); //var_dump($f); $fs = mysql_fetch_assoc($f); //var_dump($fs); $city_name = $base->getOnce("kz_city","city_name",$fs["basic_city"]); $src = $us_info->selAva($fs["login"]); $text = "<div id='one_club'><img src=../party/".$src." class='float-left'> <p style='margin-left:20px; float:left'><a href='index.php?login=".$fs["login"]."' style='font-size:14px'>" .$fs["first_name"]."<br>".$fs["login"]."</a></p> <p style='margin-left:70%'><a href='clubs.php?c=".$fs["basic_city"]."' style='font-size:11px'>".$city_name."</a></p></div>"; echo $text; } но выводится только информация об одном пользователе. а на сайте с такой фамилией и именем их двое Но я делал вот так однажды $sql = "SELECT * FROM `users` WHERE MATCH(`soname`, `name`) AGAINST('$search' IN BOOLEAN MODE)"; А вообще, полнотекстовый поиск работает на порядок быстрее, благодаря использованию индексов, каковые не использует оператор LIKE. для этого в базе данных надо же индексировать эти данные? или не обязательно? |
|
|
matroskin8 |
8.4.2013, 17:26;
Ответить: matroskin8
Сообщение
#6
|
|
Смотрим что возвращает Ваш метод:
$sqlt = mysql_fetch_assoc($sql); return $sqlt; Итак, что? Правильно, 1 ряд результата запроса. Для того, чтобы вернуть все ряды, необходимо пройтись по результату в цикле... например так: $data = array(); while($sqlt = mysql_fetch_assoc($sql)){ $data[] = $sqlt; } return $data; // возвращаем массив всех результатов для этого в базе данных надо же индексировать эти данные? или не обязательно? Обязательно, поскольку полнотекстовый поиск в своей работе использует полнотекстовый индекс. Индексирование полей несколько замедляет изменение данных таблицы, но зато их выборка становится практически мгновенной даже на очень больших массивах данных... чего не скажешь о поиске оператором LIKE, который подходит для относительно небольших массивов данных и небольших текстовых полей (CHAR / VARCHAR). |
|
|
Kuchuluk
|
Сообщение
#7
|
|
тогда вывод информации нужно тоже в цикле выводить? во здесь
if (isset($_POST["search"])) все это в цикл загнать, да? |
|
|
matroskin8 |
9.4.2013, 10:20;
Ответить: matroskin8
Сообщение
#8
|
|
Информация из БД складывается в массив. Ну а затем эта информация из массива выводится на странице в нужном виде. Понятно, что для получения информацию из массива, нужно пройтись по этому массиву в цикле, выбирая один элемент за другим.
все это в цикл загнать, да? Не все, а только то, что попадает, насколько я понимаю, в переменную $f. Можно распечатать этот объект, чтобы понять как с ним работать: print_r($f);
|
|
|
Kuchuluk
|
Сообщение
#9
|
|
Не все, а только то, что попадает, насколько я понимаю, в переменную $f. Можно распечатать этот объект, чтобы понять как с ним работать: с помощью этой функции print_r($f); теперь попало все, что нужно, два массива с данными двух пользователей теперь вставил все в цикл if (isset($_POST["search"])) { $f = $base->search(); foreach ($f as $pep_info) { $i = 0; $city_name = $base->getOnce("kz_city","city_name",$f[$i]["basic_city"]); $src = $us_info->selAva($f[$i]["login"]); $text = "<div id='one_club'><img src=../party/".$src." class='float-left'> <p style='margin-left:20px; float:left'><a href='index.php?login=".$f[$i]["login"]."' style='font-size:14px'>" .$f[$i]["first_name"]."<br>".$f[$i]["login"]."</a></p> <p style='margin-left:70%'><a href='clubs.php?c=".$f[$i]["basic_city"]."' style='font-size:11px'>".$city_name."</a></p></div>"; echo $text; $i++; } выводится два блока div с информацией о пользователе, но информация только об одном в обоих. хотя в $f попал массив с двумя |
|
|
Kuchuluk
|
Сообщение
#10
|
|
а всё, исправил. счетчик $i надо было вне цикла задавать
|
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Требуется помощь по сайту на "ВордПресс" Закрылся доступ в панель администратора |
15 | Tia2 | 2347 | 17.4.2024, 0:54 автор: diviner99 |
|
Есть ли инструмент для поиска запросов на YouTube? | 1 | rownong27 | 993 | 18.2.2024, 22:19 автор: malamut |
|
Скрипт поисковика видео StrongTube | 3 | 3josoft | 1574 | 14.8.2023, 14:45 автор: 3josoft |
|
Скрипт приема платежей p2p с карты на карту card2card Скрипт приема платежей p2p с карты на карту card2card |
15 | zladey1986 | 7833 | 26.3.2023, 8:54 автор: Palundra |
|
Продам скрипт перевода постов и комментариев | 4 | Tutich | 787 | 19.1.2023, 17:23 автор: Tutich |
Текстовая версия | Сейчас: 19.4.2024, 20:18 |