|
|
автор: dedev (01.10.2006 в 14:29) |
|
|
для: cheops
(30.09.2006 в 23:14)
| | Всем спасибо, и последний вопрос, на который хотелось бы получить ответ.
Как составить запрос, для получения общего количества найденных слов. И как результат вывести на экран (пример – по вашему запросу найдено 55 ссылок). | |
|
|
|
|
|
|
|
для: dedev
(30.09.2006 в 13:28)
| | Для этого можно модифицировать скрипт во втором посте этой теме следующим образом
<?php
$words = preg_split("|[\s]+|",$zapros);
foreach($words as $wrd)
{
if(strlen($wrd) <=3) exit("Слишком короткое слово");
$tmp[] = "slova LIKE '%$wrd%'"
}
if(!empty($tmp))
{
$query = "SELECT count(*) FROM ps WHERE ".implode(" AND ", $tmp);
...
?>
|
| |
|
|
|
|
автор: dedev (30.09.2006 в 13:28) |
|
|
для: cheops
(30.09.2006 в 11:55)
| | Спасибо всем кто мне помогает.
Как сделать, чтобы минимальное количество букв в запросе было 2 или 3. При меньшем количестве букв в запросе выдавал сообщении о необходимости ввести более длинное слово?
Заранее благодарен за Вашу помощь. | |
|
|
|
|
|
|
|
для: dedev
(29.09.2006 в 18:42)
| | Проверяйте не является ли переменная $zapros - пустой
<?php
if(empty($zapros)) exit("Запрос пуст, введите ключевые слова.");
?>
|
| |
|
|
|
|
автор: dedev (29.09.2006 в 18:42) |
|
|
для: dedev
(29.09.2006 в 13:14)
| | Разобрался все работает, даже прикрутил поиск по условию “И” “ИЛИ”.
Появился новый вопрос
Как сделать чтобы не обрабатывался пустой запрос, а то он выдает все страницы, и как сделать минимальное количество букв в запросе = 2 или 3.
Заранее благодарен за Вашу помощь. | |
|
|
|
|
автор: dedev (29.09.2006 в 13:14) |
|
|
для: cheops
(29.09.2006 в 11:44)
| | Hellp, ткните пальцем куда вставить этот код, пробовал и так и так, нечего у меня не выходит.
Если не трудно приведите полный код с новой вставкой.
Надеюсь поможете. Спасибо | |
|
|
|
|
|
|
|
для: dedev
(29.09.2006 в 11:16)
| | Для разбивки запроса на отдельные слова и формирования SQL-запроса используйте следующий код
<?php
$words = preg_split("|[\s]+|",$zapros);
foreach($words as $wrd)
{
$tmp[] = "slova LIKE '%$wrd%'"
}
if(!empty($tmp))
{
$query = "SELECT count(*) FROM ps WHERE ".implode(" AND ", $tmp);
...
?>
|
PS Вопросы посвященные базам данных, лучше сразу размещать в форуме http://www.softtime.ru/forum/index.php?id_forum=3. | |
|
|
|
|
автор: dedev (29.09.2006 в 11:16) |
|
| Когда вводится одно слово для поиска, то все отлично работает, но когда слов для поиска больше, он перестает искать.
Я понимаю, что строку из слов для поиска необходимо разделить, и составить запрос, но никак не получается.
Прошу Вашей помощи
Имеем база данных -- gbook.db
Таблица – ps
Колонки :
id – нумирация
razdel – раздел сайта
url – адрес страницы
slova – колонка по которой производится поиск, много слов в одной ячейки
zag – заголовок страницы
opis – короткое описание страницы
Все на что меня хватило
<form action="" method="POST">
поиск <input type="text" name="zpr">
<input type="submit">
</form>
<?php
// Получаем строку приводим к нижнему регистру
$zapros = @$_POST["zpr"];
$zapros = strtolower($zapros);
// Открываем БД
$db = sqlite_open("gbook.db");
// Определяем общее количество записей в таблице
$total = sqlite_query($db, "SELECT count(*) FROM ps WHERE slova LIKE '%$zapros%';");
$count = sqlite_fetch_array($total);
// Стартовая точка
if (isset($_GET['page'])) {
$page = trim($_GET['page']);
if (!is_numeric($page)) $page = 0;
if ($page < 0) $page = 0;
} else {
$page = 0;
}
// Выбираем десять записей
$posts = sqlite_query($db, "SELECT * FROM ps WHERE slova LIKE '%$zapros%' ORDER BY id LIMIT ".$page.", 1;");
echo "<CENTER>Вы искали '<font color=red>$zapros</font>'</CENTER>";
// Выводим ссылки "далее" и "назад"
if ($page > 0) {
echo("<a href=\"index.php?page=".($page - 1)."\">назад</a> ");
}
if ($count['count(*)'] > ($page + 1)) {
echo("<a href=\"index.php?page=".($page + 1)."\">далее</a><br><br>");
}
// Выводим сообщения
while ($arr = sqlite_fetch_array($posts))
{
echo("<a href=\"".$arr['url']."\">".$arr['zag']."</a><br>".$arr['opis']."</a><br><br>");
}
?> | |
|
|
|
|