|
|
|
|
|
для: Vados
(02.07.2006 в 15:45)
| |
<?
// Устанавливаем соединение с базой данных
//Здесь у4казываеш свой путь
require_once("admin/config.php");
$title="Поиск";
// Устанавливаем переменные формы
if (!get_magic_quotes_gpc())
{
$_POST['name'] = mysql_escape_string($_POST['name']);
}
$name = $_POST['name'];
?>
<p><font size="+1" color="#6699CC">Поиск на сайте</font></p>
<table width="500" border="0" cellpadding="5" cellspacing="0">
<form action=poisk.php method=post>
<tr>
<td>Ключевые слова</td>
<td><input class="input" type=text name=name value='<?php echo $name; ?>' size="35"></td>
</tr>
<tr><td> </td><td><input type=submit name=send value=Поиск></td></tr>
<input type="hidden" name="scr" value="1"></form>
</table>
<?php
if(isset($_POST['scr']))
{
if(empty($name))
{
echo "<DL><DT>Не введено искомое слово
<DD>Введите поисковое слово и повторите поиск.</DL>";
exit();
}
$name = trim($name);
// Формируем SQL-запрос
$query = "SELECT * FROM art WHERE MATCH(title) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY title
UNION SELECT * FROM art WHERE MATCH(body) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY title";
$post = mysql_query($query);
if($post)
{
$num = mysql_num_rows($post);
if($num>0)
{
echo"
<DL>
<DT>По поисковому запросу: ".$_POST['name']."
<DD><b>в статьях</b> число соответствий: $num
</DL>
<DL>";
while($posts = mysql_fetch_array($post))
{
echo " <DT><a href=index.php?id_article=".$posts['id_article'].">".$posts['title']."</a><br>";
?>
<DD>Коротко:<br>...<?= $posts['body'];?>
<?
}
echo "</DL>";
}
else
{
echo "<DL><DT>По поисковому запросу: ".$_POST['name']." ничего не найдено.
<DD>Попробуйте изменить поисковое слово.</DL>";
exit();
}
}
}
?>
|
CREATE TABLE 'art' (
'id_article' int(10) NOT NULL auto_increment,
'title' tinytext NOT NULL,
'body' tinytext NOT NULL,
'datecreate' datetime NOT NULL default '0000-00-00 00:00:00',
'url' tinytext NOT NULL,
PRIMARY KEY ('id_article'),
FULLTEXT KEY 'title' ('title'),
FULLTEXT KEY 'body' ('body')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=37 ;
так проверил, все работает, проверь версию базы. | |
|
|
|
|
|
|
|
для: куч1963
(02.07.2006 в 12:52)
| | Хорошо, спасибо, но у меня ничего не выводится при поиске, я ничего не понимаю, вот я передал, окончательный вариант скрипта:
<?
// Устанавливаем соединение с базой данных
require_once("config.php");
$title="Поиск";
// Устанавливаем переменные формы
if (!get_magic_quotes_gpc())
{
$_POST['name'] = mysql_escape_string($_POST['name']);
}
$name = $_POST['name'];
?>
<p><font size="+1" color="#6699CC">Поиск на сайте</font></p>
<table width="500" border="0" cellpadding="5" cellspacing="0">
<form action=search1.php method=post>
<tr>
<td>Ключевые слова</td>
<td><input class="input" type=text name=name value='<?php echo $name; ?>' size="35"></td>
</tr>
<tr><td> </td><td><input type=submit name=send value=Поиск></td></tr>
<input type="hidden" name="scr" value="1"></form>
</table>
<?php
if(isset($_POST['scr']))
{
if(empty($name))
{
echo "<DL><DT>Не введено искомое слово
<DD>Введите поисковое слово и повторите поиск.</DL>";
exit();
}
$name = trim($name);
// Формируем SQL-запрос
$query = "SELECT * FROM articles WHERE MATCH(title) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY name
UNION SELECT * FROM articles WHERE MATCH(body) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY name";
$post = mysql_query($query);
if($post)
{
$num = mysql_num_rows($post);
if($num>0)
{
echo"
<DL>
<DT>По поисковому запросу: ".$_POST['name']."
<DD><b>в статьях</b> число соответствий: $num
</DL>
<DL>";
while($posts = mysql_fetch_array($post))
{
echo " <DT><a href=index.php?id_article=".$posts['id_article'].">".$posts['name']."</a><br>";
?>
<DD>Коротко:<br>...<?= $posts['body'];?>
<?
}
echo "</DL>";
}
else
{
echo "<DL><DT>По поисковому запросу: ".$_POST['name']." ничего не найдено.
<DD>Попробуйте изменить поисковое слово.</DL>";
exit();
}
}
}
?>
|
БД осталась таже, только изменил поле title на текстовый тип, но у меня ничего не выводится из БД при вводе в форму поиска, помогите разобраться!
Я уже 2-е недели с этим вожусь, но пока без результатно!
Заранее спасибо! | |
|
|
|
|
|
|
|
для: Vados
(01.07.2006 в 19:01)
| |
$query = "SELECT * FROM articles WHERE MATCH(title) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY name
UNION SELECT * FROM articles WHERE MATCH(body) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
GROUP BY name";
|
и сделай поле title текстовым а не varchar, поиск идет по текстовым полям | |
|
|
|
|
|
|
|
для: куч1963
(30.06.2006 в 18:16)
| | Привет!
Вот моя таблица:
Структура таблицы 'articles'
CREATE TABLE 'articles' (
'id_article' int(10) unsigned NOT NULL auto_increment,
'title' varchar(200) default NULL,
'body' text,
'datecreate' datetime default NULL,
'url' varchar(200) default NULL,
PRIMARY KEY ('id_article'),
FULLTEXT KEY 'title' ('title','body')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=6 ;
Дамп данных таблицы 'articles'
INSERT INTO 'articles' ('id_article', 'title', 'body', 'datecreate', 'url') VALUES (1, 'Писательство', 'Всё о писательской жизни', '2006-07-01 17:18:14', NULL),
(2, 'поэзия', 'писательство', '2006-07-01 17:16:30', NULL),
(3, 'Поэзия', 'Всё о поэзии', '2006-07-01 17:16:37', NULL),
(4, 'Проза', 'Всё о прозе', '2006-07-01 17:16:45', NULL),
(5, 'Рассказы', 'Всё о рассказах', '2006-07-01 17:16:52', NULL);
|
А вот мой код самого сценария:
<?
// Устанавливаем соединение с базой данных
require_once("config.php");
$title="Поиск";
//include "index.php";
// Устанавливаем переменные формы
if (!get_magic_quotes_gpc())
{
$_POST['name'] = mysql_escape_string($_POST['name']);
}
$name = $_POST['name'];
$srchwhere = $_POST['srchwhere'];
?>
<p><font size="+1" color="#6699CC">Поиск на сайте</font></p>
<table width="500" border="0" cellpadding="5" cellspacing="0">
<form action=search1.php method=post>
<tr>
<td>Ключевые слова</td>
<td><input class="input" type=text name=name value='<?php echo $name; ?>' size="35"></td>
</tr>
<tr><td> </td><td><input class="vvod" type=submit name=send value=Поиск></td></tr>
<input type="hidden" name="scr" value="1"></form>
</table>
<?php
if(isset($_POST['scr']))
{
if(empty($name))
{
echo "<DL><DT>Не введено искомое слово
<DD>Введите поисковое слово и повторите поиск.</DL>";
//include "../util/bottom.php";
exit();
}
$name = trim($name);
// В зависимости от режима поиска формируем SQL-запрос
// Формируем SQL-запрос
$query = "select articles.id_article AS id_article,
articles.name AS name,
paragraphes.name AS text,
paragraphes.id_article
from articles, paragraphes
WHERE articles.id_article = paragraphes.id_article AND MATCH(paragraphes.name) AGAINST('$name*' IN BOOLEAN MODE)
GROUP BY articles.id_article";
$post = mysql_query($query);
if($post)
{
$num = mysql_num_rows($post);
if($num>0)
{
echo"
<DL>
<DT>По поисковому запросу: ".$_POST['name']."
<DD>в разделе <b>статьи</b> число соответствий: $num
</DL>
<DL>";
while($posts = mysql_fetch_array($post))
{
echo " <DT><a href=../article/index.php?id_article=".$posts['id_article'].">".$posts['name']."</a><br>";
?>
<DD>Коротко:<br>...<?= strtok (stristr($posts['text'], $_POST['name']),'.');?><br>
<?
}
echo "</DL>";
}
else
{
echo "<DL><DT>По поисковому запросу: ".$_POST['name']." ничего не найдено.
<DD>Попробуйте изменить поисковое слово.</DL>";
exit();
}
}
}
?>
|
Мне куч1963 кидал данный скрипт, но в нём я многое поубирал, так как мне нужен простенький поиск, без выпадающего меня с возможностью выбора где искать необходимое слово или фразу.
Так вот на основании выше созданной таблицы, я хочу реализовать поиск по:
1) названию статьи
2) содержанию статьи
Я не могу понять, как мне переделать часть в сценарии:
$query = "select articles.id_article AS id_article,
articles.name AS name,
paragraphes.name AS text,
paragraphes.id_article
from articles, paragraphes
WHERE articles.id_article = paragraphes.id_article AND MATCH(paragraphes.name) AGAINST('$name*' IN BOOLEAN MODE)
GROUP BY articles.id_article";
На ту, которая мне подойдёт.
Понимаю, что очень надоел со своими вопросами поиска, но очень хочу разобраться с принципом поиска, буду всем очень благодарен, а особенно: Cheops & куч1963. | |
|
|
|
|
|
|
|
для: Vados
(30.06.2006 в 17:38)
| | Я тебе в предыдущем топе кидал скрипт, подставь свои данные столбов и название таблиц и все. | |
|
|
|
|
|
|
|
для: Vados
(29.06.2006 в 21:47)
| | Ребята, но мне кто-нибудь поможет?!
Спасибо! | |
|
|
|
|
|
|
|
для: Vados
(29.06.2006 в 00:03)
| | Всем привет!
Мне кто-нибудь поможет?
Прошу очень нужно!
Заранее спасибо! | |
|
|
|
|
|
|
|
для: куч1963
(28.06.2006 в 23:00)
| | Привет!
Я не совсем тебя понимаю!
Я сейчас только как пример загнал в БД, пару данных, которыу у меня хранятся в таблице articles.
Там я буду искать по заголовку статьи и по содержанию, мне пока более не нужно!
У тебя есть готовый пример, напиши, буду безумно благодарен! :-))
Только ести можешь, вышли с описанием, так как я в этом новичок! :-)) | |
|
|
|
|
|
|
|
для: Vados
(28.06.2006 в 17:49)
| | Сейчас где они хранятся?
По моему ты ищеш в базе, поля проиндексированы, или ты хочешь сделать статистику обращений к документам через поиск? | |
|
|
|
|
|
|
| Всем привет!
Понимаю, что всем уже очень сильно надоел, особенно Cheops, но я поставил себе цель сделать во чтобы то ни стало поиск.
Сейчас я немного упростил себе задачу, а именно:
1) Мне необходимо реализовать поиск только по названию статьи и по содержанию статьи
2) Что я создал в БД:
БД: 'search'
Структура таблицы 'articles'
CREATE TABLE 'articles' (
'id' int(10) unsigned NOT NULL auto_increment,
'title' varchar(200) default NULL,
'body' text,
PRIMARY KEY ('id'),
FULLTEXT KEY 'title' ('title','body')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;
Дамп данных таблицы 'articles'
INSERT INTO 'articles' ('id', 'title', 'body') VALUES (1, 'MySQL', 'Начало совершенствования MySQL'),
(2, 'Windows', 'Операционная система'),
(3, 'MS Office', 'Пакет оффисных приложений');
|
3) написал по подобию из примеров, которые расматривались выше из др. топиков, вот что получилось:
<?php
include "config.php";
// Режим поиска
define(TITLES,1);
define(BODY,2);
// Устанавливаем переменные формы
$name = $_POST['name'];
$srchwhere = $_POST['srchwhere'];
$title = $_POST['title'];
$body = $_POST['body'];
?>
<html>
<head>
<body>
<table>
<form action="search.php" method="POST">
<tr>
<td>Введите слово или фразу</td>
<td><input type="text" name="name" value='<?php echo $name; ?>'></td>
</tr>
<tr>
<td>Искать в</td>
<td>
<select type=text name=srchwhere>
<option value=
<?php
echo TITLES;
if ($srchwhere == TITLES)
echo "checked";
?>>
в названиях статей
<option value=
<?php
echo BODY;
if ($srchwhere == BODY) echo "checked";
?>>в статьях
</select>
</td>
<td>
<input type=submit name=send value=Найти>
</td>
</tr>
<?php
if (!empty($name))
{
// Разбиваем поисковую фразу на подстроки, разделённые пробелами
$name = trim($name);
$temp = strtok($name, " ");
while ($temp)
{
// Полнотекстовый поиск по столбцу name таблицы articles
// Формируем поисковую часть SQL-запроса, учитывая логику,
// заданную во временной переменной $logic
if ($is_query) $search .= " MATCH (name) AGAINST ('$temp')";
else $search .= "MATCH (name) AGAINST ('$temp')";
$is_query = true;
$temp = strtok(" ");
}
// В зависимости от режима поиска формируем SQL-запрос
switch ($srchwhere)
{
case TITLES: // Поиск в названиях статей
{
}
?>
|
Помогите грамотно дописать код.
4) После того, как напишу этот кусок кода, мне необходимо, чтобы все статьи и их названия хранились в БД?
А как это сделать, также необходимо писать сценарий?
Помогите пожалуйста!
Пока я не смогу написать поиск, я не успокоюсь!
А Вам всем, огромное спасибо за помощь! | |
|
|
| |
|