|
|
|
| Как организовать поиск в определенном столбце таблицы, если известно только значение ключа? | |
|
|
|
|
|
|
|
для: helovek
(22.05.2007 в 19:57)
| | этот ключ и надо искать? | |
|
|
|
|
|
|
|
для: Trianon
(22.05.2007 в 20:27)
| | Да, но у него несколько столбцов-значений. Таблица имеет ключ, но поиск идет по имени | |
|
|
|
|
|
|
|
для: helovek
(22.05.2007 в 20:36)
| | приводите пример. Развернутый.
Иначе Вас не понять. | |
|
|
|
|
|
|
|
для: Trianon
(22.05.2007 в 20:50)
| | для поиска по таблице я ввожу только значение ключа и указываю в скрипте какой столбец выводить. Например мне нужно методом POST передать искомый элемент. Например:
пенициллин. У него есть показания столбец evid и противопоказания столбец contr. Гораздо важнее знать противопоказания. Т е вывести значение таблицы evid для name из column -evid | |
|
|
|
|
|
|
|
для: helovek
(23.05.2007 в 07:24)
| | пример строк в таблице мы увидим?
Лучше - дамп структуры и данных (фрагмент, который бы иллюстрировал этот пример) | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2007 в 10:00)
| | CREATE TABLE evid (
name text NOT NULL,
evid text NOT NULL,
contr text NOT NULL
) TYPE=MyISAM;
ALTER TABLE `evid`
ADD `id`
INT( 11 )
NOT NULL
AUTO_INCREMENT
PRIMARY KEY
FIRST
; | |
|
|
|
|
|
|
|
для: helovek
(23.05.2007 в 17:20)
| | Структура - замечательно. Теперь несколько операторов INSERT из дампа данных. Понагляднее. | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2007 в 17:25)
| | <?php
// Устанавливаем соединение с базой данных
require_once("config.php");
// Экранируем спец-символы
if (!get_magic_quotes_gpc())
{
$_POST['name'] = mysql_escape_string($_POST['name']);
$_POST['evid'] = mysql_escape_string($_POST['evid']);
$_POST['contr'] = mysql_escape_string($_POST['contr']);
}
// Формируем SQL-запрос на добавление информации
$query = "INSERT INTO evid VALUES(id,'$_POST[name]','$_POST[evid]','$_POST[contr]')";
if(!mysql_query($query)) exit(mysql_error());
else echo "Данные успешно добавлены";
echo"<Meta Http-equiv=\"Refresh\" Content=\"0; Url=otchet.php\">";
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
// Формируем SQL-запрос на извлечение информации
$query = "SELECT * FROM evid";
$tbl = mysql_query($query);
print("<table width=100% border=\"1\">\n");
print("<tr>\n");
print ("<td align=center><B>Препарат</B></td>\n");
print( "<td align=center><B>Показания</B></td>\n");
print ("<td align=center><B>Противопоказания</B></td></tr>\n");
if(!$tbl) exit(mysql_error());
// Если имеется хоть одна запись - выводим
if(mysql_num_rows($tbl))
{
while($table = mysql_fetch_array($tbl))
{
print("<tr>\n");
print("<td>" . $table['name']."</td>\n");
print("<td>" . $table['evid']."</td>\n");
print("<td>" . $table['contr']."</td>\n");
print("</tr>\n"); | |
|
|
|
|
|
|
|
для: helovek
(23.05.2007 в 17:32)
| | Как запросить содержимое ячейки? | |
|
|
|
|
|
|
|
для: helovek
(24.05.2007 в 06:57)
| | третий день я жду примеры записей, которые могут встретиться в таблице, и среди которых нужно выполнять поиск.
Пример поискового запроса Вы привели. А примеры строк, среди которых искать нужно - нет. | |
|
|
|
|
 8.4 Кб |
|
|
для: Trianon
(24.05.2007 в 09:53)
| | Я бы вам прикрепил всю таблицу, но не получается. | |
|
|
|
|
|
|
|
для: helovek
(24.05.2007 в 15:04)
| | Уф.....
PHPMyAdmin у Вас есть?
Запускаем его. Выбираем слева свою базу данных, а в ней - свою таблицу.
После этого в правом окне выбираем закладку экспорт.
Внизу ставим архивировать в zip и нажимаем [Пошел]
если таблица огромная - чуть выше указываем - Дамп 15 записей начиная с 200 например.
Получаем зазипованный дамп со структурой и данными, прикладываем его к ответу.
Если у Вас нету PhpMyAdmin - все Ваши вопросы бесполезны .
Вы не сможете ни развернуть базу, ни унести, ни поправить, случись чего...
Хотя на хостинге он обычно есть, и в Денвер тоже входит. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 15:17)
| | Да зачем вам эта таблица? Tам же пока ничего интересного нет! Она только в стадии разработки. Просто писать очень много и думаю есть ли смысл если не организовать быстрый поиск по конкретному препарату.
Если вас что -то интересует конкретное, я отвечу. | |
|
|
|
|
|
|
|
для: helovek
(24.05.2007 в 19:47)
| | Меня интересует лежат ли там искомые слова по отдельности (по слову на строку таблицы) или целые фразы.
Если там лежит одно слово
"пеницилин"
это одно
а если там лежит текст из справочника по фармакологии - это другое. | |
|
|
|
|
|
|
|
для: helovek
(24.05.2007 в 19:47)
| | Кроме того, не имея таблицы, как Вы будете проверять скрипт?
И как это буду делать, допустим, я?
Нужно же опираться на какое то тестовое наполнение, чтобы потом можно было сказать.
Работает . Ищет всё правильно.
Или
Не работает, Вместо того, чтобы по запросу "пеницилин" показать строки N 3,7 и 20 она показывает N 7 и 41. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 19:56)
| | вот таблица. А у меня HeidiSQL. | |
|
|
|
|
|
|
|
для: helovek
(24.05.2007 в 20:26)
| | Вот Ваш дамп...
А теперь будем думать. | |
|
|
|
|
|
|
|
для: 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";
}
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(24.05.2007 в 22:07)
| | Спасибо!!! | |
|
|
|