Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Поиск в базе данных SQLite

Сообщения:  [1-8] 

 
 автор: dedev   (01.10.2006 в 14:29)
 
   для: cheops   (30.09.2006 в 23:14)
 

Всем спасибо, и последний вопрос, на который хотелось бы получить ответ.
Как составить запрос, для получения общего количества найденных слов. И как результат вывести на экран (пример – по вашему запросу найдено 55 ссылок).

   
 
 автор: cheops   (30.09.2006 в 23:14)   письмо автору
 
   для: 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. При меньшем количестве букв в запросе выдавал сообщении о необходимости ввести более длинное слово?
Заранее благодарен за Вашу помощь.

   
 
 автор: cheops   (30.09.2006 в 11:55)   письмо автору
 
   для: 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, ткните пальцем куда вставить этот код, пробовал и так и так, нечего у меня не выходит.
Если не трудно приведите полный код с новой вставкой.
Надеюсь поможете. Спасибо

   
 
 автор: cheops   (29.09.2006 в 11:44)   письмо автору
 
   для: 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>");
}
?>

   

Сообщения:  [1-8] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования