Квартиры, дома, земельные участки Краснодарского края без посредников. Объявления собственников недвижимости.
Реклама здесь
Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Поиск по таблице MySql базы на PHP

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

Ниже я привожу несколько укороченный код, который сохраняет все необходимые элементы для функционирования.


<?php
// подключение к базе MySql
require_once($_SERVER['DOCUMENT_ROOT'].'/config.php');
// если передан поисковый запрос
if($q){
   
$ar_q=explode(" "$q);
   
$add_sql='';
   for(
$i=0;$i<count($ar_q);$i++)
    
$add_sql.=' ((locate("'.strtolower(addslashes($ar_q[$i])).'",lower(price.name))>0) or'.
          
' ("'.strtolower(addslashes($ar_q[$i])).'"=lower(price.kod_prodact))) and';
   
$add_sql=' WHERE'.$add_sql.' ost<>"нет"';
   
$add_q=($q?'&q='.urlencode($q):'');
}else{
    
$add_sql=' WHERE ost<>"нет"';
    
$add_q='';
}

// Общее количество информации
//$count = mysql_numrows(sql('SELECT * from price '.$add_sql));
$row mysql_fetch_assoc(sql('SELECT count(*) as counter from price '.$add_sql));
$perpage 20// Количество отображаемых данных из БД на одной странице
$count=intval($row['counter']); // общее кол-во товаров

if($count){

$pages_count ceil($count $perpage); // Количество страниц
// Если номер страницы оказался больше количества страниц
if ($page $pages_count$page $pages_count;
$start_pos = ($page 1) * $perpage// Начальная позиция, для запроса к БД

$bar=link_bar($page$count$pages_count8);
echo 
$bar;

// сортировка по наименованию или цене
$ord = @$_GET['ord']; if(($ord<>'name')&&($ord<>'price'))$ord='name';
if(
$ord=='price'){
    print 
"<h3><a href=\"".$_SERVER['PHP_SELF'].'?page='.$page.$add_q."\">Наименование</a></h3>
    &#8595;Цена<a href='#price'><sup>*</sup></a>&nbsp;\n"
;
    
$add_q.='&ord=price';
}else
    print 
"<h3>&#8595;Наименование</h3>
    <a href=\""
.$_SERVER['PHP_SELF'].'?page='.$page.$add_q."&ord=price\">Цена</a>&nbsp;\n";

// Вывод информации из базы данных
$result sql('SELECT * from price '.$add_sql.' ORDER BY '.$ord.' LIMIT '.$start_pos.', '.$perpage);
while (
$row mysql_fetch_assoc($result)) {
   
$name=($q?preg_replace("/(".str_replace('/','\/',$q).")/si",'<font color=red>\\1</font>',htmlspecialchars($row['name'])):htmlspecialchars($row['name']));// Подсветка

   
print "<h3 id='n".$row['id']."'>".$name."</h3>
    "
.number_format($row['price'], 0'.'' ')." руб.";    // цена
   
}
echo 
"&nbsp;<br clear=all />$bar<span class='it'>".($q?"Найдено по запросу":"Всего")." <b>".number_format($count0'.'' ')."</b> товаров.</span>";
}else print 
"<h3>По вашему запросу ничего не найдено!</h3>";
?>
Скопировать в буфер

Функция вывода постраничной навигации:


<?php
function link_bar($page$count$pages_count$show_link)
{global 
$add_q;
// $show_link - это количество отображаемых ссылок;
// нагляднее будет, когда это число будет парное
// Если страница всего одна, то вообще ничего не выводим
if ($pages_count == 1) return '';
$out='';
$begin $page intval($show_link 2);

// Сам постраничный вывод
// Если количество отображ. ссылок больше кол. страниц
if ($pages_count <= $show_link 1$show_dots 'no';
// Вывод ссылки на первую страницу
if (($begin 2) && ($pages_count $show_link 2))
    
$out.='<a href="'.$_SERVER['PHP_SELF'].'?page=1'.$add_q.'" title="в начало"> &lt;&lt; </a> ';

for (
$j 0$j <= $show_link$j++) // Основный цикл вывода ссылок
{  $i $begin $j// Номер ссылки
   // Если страница рядом с началом, то увеличить цикл для того,
   // чтобы количество ссылок было постоянным
   
if ($i 1) continue;
   
// Подобное находится в верхнем цикле
   
if (!isset($show_dots) && $begin 1) {
   
$out.=' <a href="'.$_SERVER['PHP_SELF'].'?page='.($i-1).$add_q.'"><b>...</b></a> ';
   
$show_dots "no";
   }
   
// Номер ссылки перевалил за возможное количество страниц
   
if ($i $pages_count) break;
   if (
$i == $page$out.=' <a><b>'.$i.'</b></a> ';
   else 
$out.=' <a href="'.$_SERVER['PHP_SELF'].'?page='.$i.$add_q.'">'.$i.'</a> ';

   
// Если номер ссылки не равен кол. страниц и это не последняя ссылка
   
if (($i != $pages_count) && ($j != $show_link)) $out.=' ';// Разделитель ссылок
   // Вывод "..." в конце
   
if (($j == $show_link) && ($i $pages_count))
    
$out.=' <a href="'.$_SERVER['PHP_SELF'].'?page='.($i+1).$add_q.'"><b>...</b></a> ';

}
// Вывод ссылки на последнюю страницу
if ($begin $show_link $pages_count)
    
$out.=' <a href="'.$_SERVER['PHP_SELF'].'?page='.$pages_count.$add_q.'" title="в конец"> &gt;&gt; </a>';

return 
"\n".$out."\n";
// Конец функции
?>
Скопировать в буфер

© Copyright 2008-2012 by KDG