Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по базе данных 
:(
    Опции темы
sunland
  Дата 23.6.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



Поиск нужен вот для этого проекта.

---------------------------------------------------------
http://www.xefus.net/ideas/xe-cat/index.php
---------------------------------------------------------

Вот код:

Код

<?php

include "config.php";

include "header.inc.php"; 

$rowsPerPage = 5;
$pageNum = 1;

// counting the offset
$offset = ($pageNum - 1) * $rowsPerPage;

$keywords = explode(" ", $search);

$query = "SELECT id,name,description,url FROM xelinks " .
"WHERE description LIKE '%".$keywords['0']."%'";

for ($i=1; $i<count($keywords); $i++) {
$query = $query." AND description LIKE '%".$keywords[$i]."%'";
}
$query = $query." ORDER BY id LIMIT $offset, $rowsPerPage";

$result2 = mysql_query($query) or die(mysql_error());

?>


<?php

$keywords = explode(" ", $search);

$query = "SELECT COUNT(id) AS numrows FROM xelinks " .
"WHERE description LIKE '%".$keywords['0']."%'";

for ($i=1; $i<count($keywords); $i++) {
$query = $query." AND description LIKE '%".$keywords[$i]."%'";
}

$result = mysql_query($query) or die('Error, query failed');
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

// how many pages we have when using paging?
$maxPage = ceil($numrows/$rowsPerPage);

// print the link to access each page
$self = $_SERVER['PHP_SELF'];
$nav = '';

for($page = 1; $page <= $maxPage; $page++)
{
if ($page == $pageNum)
{
$nav .= " $page ";
}
else
{
$nav .= " <a href=\"$self?page=$page&search=$search\" class='rol'>$page</a> ";
}
}
// creating previous and next link
// plus the link to go straight to
// the first and last page

if ($pageNum > 1)
{
$page = $pageNum - 1;
$prev = " <a href=\"$self?page=$page&search=$search\" class='rol'>[Prev]</a> ";

$first = " <a href=\"$self?page=1&search=$search\" class='rol'>[First Page]</a> ";
}
else
{
$prev = ' ';
$first = ' ';
}

if ($pageNum < $maxPage)
{
$page = $pageNum + 1;
$next = " <a href=\"$self?page=$page&search=$search\" class='rol'>[Next]</a> ";

$last = " <a href=\"$self?page=$maxPage&search=$search\" class='rol'>[Last Page]</a> ";
}
else
{
$next = ' ';
$last = ' ';
}

while($row = mysql_fetch_array($result2)) {

                        print "<table border=0 width='60%' align='center'>";
            print "<tr>\n";
            print "<td>\n";
                        print "<a target=_blank href=\"go.php?id=".$row["id"]."\" class=link>".$row["name"]."</a><br>\n";
            print "<div class=aboutlink>".$row["description"]."</div>";
            print "<div class=url>".$row["url"]."</div><br>";
            print "</td>\n";
            print "</tr>\n"; 
}

echo "<tr>";
echo "<td>";
echo "<div align=center class='rol'>".$first . $prev . $nav . $next . $last."</div>";
echo "</td>";
echo "</tr>";

?>
</table>
<?
include "footer.inc.php"; 
?>


Но проблема в том что он дает результат до начана поиска(сразу)
И вторая когда нечего не ввиденно он показывает все сайты в базе данных.
А также кода нечто не найдено надо чтобы он писал "Нету".[*] 
PM MAIL   Вверх
Wolf1994
Дата 23.6.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 2
Всего: 29



Замечания.
 Часть кода повторяется дважды.
 Результаты поиска не сортируются по релевантности.

Можно сделать:
 В начале скрипта проверять:
Код

if ( preg_replace ('/[a-zA-Z]/Usi', "", $search)!=$search )
{
 //...идём дальше,
}
else
{
 //иначе выводим сообщение, что запрос пустой
}

 После выборки из базы, можно отсортировать результаты по количеству совпадений и вывести их в соответствующем порядке.
Код

//Находим количество совпадений
while($row = mysql_fetch_array($result2))
{
 $description [$row["id"]]=$row["description"];
 //$param2 [$row["id"]]=$row["param2"];
 //$param3 [$row["id"]]=$row["param3"];
 for ($i=0; $i<count ($keywords); $i++)
  $relevancy [$row["id"]]=substr_count( strtolower ($description [$row["id"]]), strtolower ($keywords [$i]) );
}
//Выстраиваем по нему
if ( count ($relevancy)>0 )
{
 arsort($relevancy, SORT_NUMERIC);
 reset($relevancy);
 $ilast=0;
 while (list($key, $val) = each($relevancy))
 {
  if ($val>0)
  {
   $ilast++;
   $spoint [$ilast]=$key;
  }
 }
 //Выводим результаты
 for ($i=1; $i<=count ($ilast); $i++)
 {
  print $description [$spoint [$i]];
  //print $param2 [$spoint [$i]].$param3 [$spoint [$i]];
 }
}
else print "Нету";

 - примерный набросок.   

Это сообщение отредактировал(а) Wolf1994 - 23.6.2006, 21:05
PM MAIL WWW   Вверх
sunland
Дата 29.6.2006, 04:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



Спасибо но я сделал проще.

Можешь посмотреть и попробовать.

Ссылка 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1373 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.