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

Форум MySQL

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

 

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

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

тема: организация поиска по определенному столбцу таблицы

Сообщения:  [1-10]   [11-20] 

 
 автор: helovek   (25.05.2007 в 07:57)   письмо автору
 
   для: Trianon   (24.05.2007 в 22:07)
 

Спасибо!!!

   
 
 автор: Trianon   (24.05.2007 в 22:07)   письмо автору
 
   для: Trianon   (24.05.2007 в 20:40)
 

Вот такая штуковина родилась:
По названию пытается искать точно.
По остальным полям - контекстно.
Можно объединять запросы по |
внутри них - по &
внутри них ставить отрицания ^
*инфекц*&*бронх*|^*берем*



<?php
// Устанавливаем соединение с базой данных
require_once("config.inc.php");

// восстановление строк входных параметров
function unmq($a)
{ return 
$a === null null : (get_magic_quotes_gpc() && is_string($a)
                               ? 
stripslashes($a): $a); }

//подготовка параметров формы
function arg($a){ return'"'.htmlspecialchars($a).'"';}

// генерация выражения поиска
function gen_filter($a$fld)
{
    if(
$a == '' || $a == '**')return 1;

    
$d1 = array('|''&');     $s1 = array('%''_');
    
$d2 $s1;                 $s2 = array('*','?');
    
$d3 = array('\\%''\\_'); $s3 $d1;

    
$t1  = array();
    foreach(
explode('|'$a) as $b)     // цикл по логическим суммам
    
{
     
$t2  = array();
     foreach(
explode('&'$b) as $val// цикл по термам
     
$not '';
       if(
$val[0] == '^') {$val substr($val1); $not 'NOT ';}
      
$val str_replace($s1$d1$val);
      
$val str_replace($s2$d2$val);
      
$val "$not( &1 LIKE '".str_replace($s3$d3//
       
mysql_escape_string($val))."')";
      
$t2[] = $val;
     }
     
$t2 implode(" AND "$t2); // объединение термов
     
$t1[] = $t2;
    }
    
$t1 implode(" OR "$t1);  // объединение сумм
    
return "( "str_replace('&1',"$fld"$t1 ). " )"// подстановка полей
}


// ----- начало кода -----

// загрузка строк параметров поиска
    
$name unmq(@$_GET['name']);
    
$evid unmq(@$_GET['evid']);
    
$contrunmq(@$_GET['contr']);

// вывод формы запроса
echo ("
<form action=? >
<br>Название: <input name=name value="
.arg($name).">
<br>Показания: <input name=evid value="
.arg($evid).">
<br>Противопоказания: <input name=contr value="
.arg($contr).">
<input type=submit value=Искать>
</form>"
);

// построение фильтрующих выражений
    
$t = array();
    
$t[] = gen_filter("$name"'name');
    
$t[] = gen_filter("*$evid*"'evid');
    
$t[] = gen_filter("*$contr*"'contr');
    if(
$t[0] == '1' && $t[1] == '1' && $t[2] == '1'$t[0] = 0;

// сборка фильтров в запроос

    
$sql "SELECT * FROM evid WHERE "implode(" AND "$t);
    echo 
"<hr>$sql<hr>";
// исполнение запроса
    
$res mysql_query($sql) or die("Error in $sql :"mysql_error());
    
$numrows mysql_num_rows($res);

// вывод отчета

    
echo "$numrows rows found<br>\r\n";
    for(
$n 1$row mysql_fetch_assoc($res); $n++)
    {
        
$name   nl2br(htmlspecialchars($row['name']));
        
$evid   nl2br(htmlspecialchars($row['evid']));
        
$contr  nl2br(htmlspecialchars($row['contr']));
        echo 
"<hr/><b>$n.</b> Name: <b>$name</b><br/>\r\n"
           
"<br/>Evid: $evid<br/>\r\n"
           
"<br/>Contr: $contr<br/>\r\n";
    }

?>

   
 
 автор: Trianon   (24.05.2007 в 20:40)   письмо автору
 
   для: helovek   (24.05.2007 в 20:26)
 

Вот Ваш дамп...
А теперь будем думать.

   
 
 автор: helovek   (24.05.2007 в 20:26)   письмо автору
 
   для: Trianon   (24.05.2007 в 19:56)
 

вот таблица. А у меня HeidiSQL.

   
 
 автор: Trianon   (24.05.2007 в 19:56)   письмо автору
 
   для: helovek   (24.05.2007 в 19:47)
 

Кроме того, не имея таблицы, как Вы будете проверять скрипт?
И как это буду делать, допустим, я?
Нужно же опираться на какое то тестовое наполнение, чтобы потом можно было сказать.
Работает . Ищет всё правильно.
Или
Не работает, Вместо того, чтобы по запросу "пеницилин" показать строки N 3,7 и 20 она показывает N 7 и 41.

   
 
 автор: Trianon   (24.05.2007 в 19:52)   письмо автору
 
   для: helovek   (24.05.2007 в 19:47)
 

Меня интересует лежат ли там искомые слова по отдельности (по слову на строку таблицы) или целые фразы.

Если там лежит одно слово
"пеницилин"
это одно
а если там лежит текст из справочника по фармакологии - это другое.

   
 
 автор: helovek   (24.05.2007 в 19:47)   письмо автору
 
   для: Trianon   (24.05.2007 в 15:17)
 

Да зачем вам эта таблица? Tам же пока ничего интересного нет! Она только в стадии разработки. Просто писать очень много и думаю есть ли смысл если не организовать быстрый поиск по конкретному препарату.
Если вас что -то интересует конкретное, я отвечу.

   
 
 автор: Trianon   (24.05.2007 в 15:17)   письмо автору
 
   для: helovek   (24.05.2007 в 15:04)
 

Уф.....

PHPMyAdmin у Вас есть?
Запускаем его. Выбираем слева свою базу данных, а в ней - свою таблицу.
После этого в правом окне выбираем закладку экспорт.
Внизу ставим архивировать в zip и нажимаем [Пошел]
если таблица огромная - чуть выше указываем - Дамп 15 записей начиная с 200 например.
Получаем зазипованный дамп со структурой и данными, прикладываем его к ответу.


Если у Вас нету PhpMyAdmin - все Ваши вопросы бесполезны .
Вы не сможете ни развернуть базу, ни унести, ни поправить, случись чего...

Хотя на хостинге он обычно есть, и в Денвер тоже входит.

   
 
 автор: helovek   (24.05.2007 в 15:04)   письмо автору
8.4 Кб
 
   для: Trianon   (24.05.2007 в 09:53)
 

Я бы вам прикрепил всю таблицу, но не получается.

   
 
 автор: Trianon   (24.05.2007 в 09:53)   письмо автору
 
   для: helovek   (24.05.2007 в 06:57)
 

третий день я жду примеры записей, которые могут встретиться в таблице, и среди которых нужно выполнять поиск.
Пример поискового запроса Вы привели. А примеры строк, среди которых искать нужно - нет.

   

Сообщения:  [1-10]   [11-20] 

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

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