|
|
|
| Нужно вывести результат поиска по базе
значения для поиска вводит пользователь или выбирает из списка через вот такую форму-таблицу!
<form action=? method="post">
<input type="submit" value="Поиск">
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td>N</td>
<td>город</td>
<td>код_абонента</td>
<td>част_орг</td>
....
<td>дата_вкл</td>
<td>состояние</td>
<td>дата_блок</td>
</tr>
<tr>
<td>1</td>
<td><input name="s_city" type="text" value="Введите назв.города"></td>
<td><input name="s_code" type="text" value="Введите код абонента"></td>
<td><select name="s_ch_org">
<option value="chast">частник</option>
<option value="org">орг</option>
<option value="all">все</option>
</select></td>
<td><input name="s_d_vkl" type="text" value="Введите дату_вкл"></td>
<td><select name="s_status">
<option value="ok">ok</option>
<option value="b_dolg">блок. за неуплату</option>
<option value="b_vrem">врем. блок.</option>
<option value="del">удалён</option>
</select></td>
<td> </td>
</tr>
</table>
</form>
|
Даже если ничего не заполнено должны выводится все данные, причём допустим значения до многоточия беруться из таблицы "abonent" а остальная из таблицы "dates"! Связаны эти таблицы по полю code(код абонента)! Соответственно если выбрано или введено только одно или два значения! Как всё это учесть в запросе? | |
|
|
|
|
|
|
|
для: lilu
(19.09.2005 в 20:15)
| | А вы не могли бы привести структуру таблиц (получить их можно при помощи оператора SHOW CREATE TABLE)? | |
|
|
|
|
|
|
|
для: cheops
(20.09.2005 в 01:08)
| | Таблица "abonent"
id int(2) auto_inc - primary key
city varchar(20)
code varchar(8)
ch_org set(частник, орг, все)
Таблица "dates"
id int(2) auto_inc - primary key
code varchar(8)
data_vkl date
status set(ok, бл.за неуплату, врем.блок, удалён)
data_blok date | |
|
|
|
|
|
|
|
для: lilu
(20.09.2005 в 10:39)
| | Можно формировать запрос на поиск примерно следующим образом
<?php
if($_POST['s_city'] != 'Введите назв.города' && $_POST['s_city'] != '')
{
$query[] = "abonent.city LIKE '$_POST[s_city]'";
}
$query[] = "abonent.code = $_POST[s_code]";
$query[] = "FIND_IN_SET('$_POST[s_ch_org]',abonent.ch_org)>0";
if($_POST['s_d_vkl'] != 'Введите дату_вкл' && $_POST['s_d_vkl'] != '')
{
$query[] = "dates.data_vkl = '$_POST[s_d_vkl]'";
}
$query[] = "FIND_IN_SET('$_POST[s_status]',dates.ch_org)>0";
$query[] = "abonent.code = dates.code"
// Формируем конечный запрос
$sql = "SELECT * FROM dates, abonent WHERE ".implode(" AND ",$query)." GROUP BY abonent.code"
echo $sql;
?>
|
Потестируйте его - повыводите запросы и повыполняйте их в phpMyAdmin пред тем как обрабатывать результаты запроса, чтобы выявить все возможные недочёты. | |
|
|
|
|
|
|
|
для: cheops
(20.09.2005 в 12:52)
| | М.. да! НЕ просто разобраться! Если вам не сложно пояснит ехоть кратенько каждую строчку!
И что происходит если поля пользователь не заполняет - допустим оно пустое или там всё же написано Введите..., надо чтобы учитывались все записи этого поля! Это здесь не срабатывает! А что ж делать тогда? :( | |
|
|
|
|
|
|
|
для: lilu
(20.09.2005 в 18:07)
| | Если строка пустая или содержит фразу 'Введите назв.города' тогда условие
<?php
if($_POST['s_city'] != 'Введите назв.города' && $_POST['s_city'] != '')
?>
|
не выполняется и никаких ограничений в запросе по данному полю не будет - т.е. выведутся все поля. Мы последовательно формируем куски SQL-запроса, которые помещаем в массив $query. После того, как массив заполнен - мы объединяем все части в один запрос при помощи функции implode, первый параметр которой является разделителем (' AND '). Так как как у вас используется тип SET (совершенно непонятно зачем - помоему логичнее использовать ENUM) приходится использовать MySQL-функцию FIND_IN_SET, которая ищет вхождение.
Да вы просто выведите результат - у вас многие вопросы просто отпадут. | |
|
|
|