|
|
|
|
|
для: 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($val, 1); $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']);
$contr= unmq(@$_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";
}
?>
|
| |
|
|
|
|
|
|
|
для: helovek
(24.05.2007 в 20:26)
| | Вот Ваш дамп...
А теперь будем думать. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 19:56)
| | вот таблица. А у меня HeidiSQL. | |
|
|
|
|
|
|
|
для: helovek
(24.05.2007 в 19:47)
| | Кроме того, не имея таблицы, как Вы будете проверять скрипт?
И как это буду делать, допустим, я?
Нужно же опираться на какое то тестовое наполнение, чтобы потом можно было сказать.
Работает . Ищет всё правильно.
Или
Не работает, Вместо того, чтобы по запросу "пеницилин" показать строки N 3,7 и 20 она показывает N 7 и 41. | |
|
|
|
|
|
|
|
для: helovek
(24.05.2007 в 19:47)
| | Меня интересует лежат ли там искомые слова по отдельности (по слову на строку таблицы) или целые фразы.
Если там лежит одно слово
"пеницилин"
это одно
а если там лежит текст из справочника по фармакологии - это другое. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 15:17)
| | Да зачем вам эта таблица? Tам же пока ничего интересного нет! Она только в стадии разработки. Просто писать очень много и думаю есть ли смысл если не организовать быстрый поиск по конкретному препарату.
Если вас что -то интересует конкретное, я отвечу. | |
|
|
|
|
|
|
|
для: helovek
(24.05.2007 в 15:04)
| | Уф.....
PHPMyAdmin у Вас есть?
Запускаем его. Выбираем слева свою базу данных, а в ней - свою таблицу.
После этого в правом окне выбираем закладку экспорт.
Внизу ставим архивировать в zip и нажимаем [Пошел]
если таблица огромная - чуть выше указываем - Дамп 15 записей начиная с 200 например.
Получаем зазипованный дамп со структурой и данными, прикладываем его к ответу.
Если у Вас нету PhpMyAdmin - все Ваши вопросы бесполезны .
Вы не сможете ни развернуть базу, ни унести, ни поправить, случись чего...
Хотя на хостинге он обычно есть, и в Денвер тоже входит. | |
|
|
|
|
 8.4 Кб |
|
|
для: Trianon
(24.05.2007 в 09:53)
| | Я бы вам прикрепил всю таблицу, но не получается. | |
|
|
|
|
|
|
|
для: helovek
(24.05.2007 в 06:57)
| | третий день я жду примеры записей, которые могут встретиться в таблице, и среди которых нужно выполнять поиск.
Пример поискового запроса Вы привели. А примеры строк, среди которых искать нужно - нет. | |
|
|
|
|