|
|
|
|
|
для: cheops
(01.04.2008 в 12:14)
| | Т.е. повторять эту конструкцию
while ($filter = mysql_fetch_array($result)){
$query="SELECT * FROM data_otprav WHERE id_data_otprav='".$filter['id_data_otprav']."'";
$new = mysql_query($query);
while($nomera = mysql_fetch_array($new)){
|
для каждой таблицы столько раз, сколько надо? Значит у меня будет куча вложенных while? | |
|
|
|
|
|
|
|
для: JIyKaBbIu
(01.04.2008 в 09:41)
| | Лучше так и вытаскивайте - если будете пользоваться многотабличным запросом, то когда данных станет много - он будет слишком долго выполняться. Чтобы сделать код элегантнее - оформите вывод данных для каждой из таблиц в виде отдельной функции. | |
|
|
|
|
|
|
|
для: JIyKaBbIu
(31.03.2008 в 16:22)
| | Здравствуйте, у меня возникла еще одна проблема:
Поиск я организовал так, как вы мне подсказали, все замечательно работает, не получается сделать выдачу результата поиска.
Т.е. id записей из главной таблицы, которые удовлетворяют заданному фильтру при поиске я получаю, теперь из каждой записи вместо id вспомогательных таблиц, мне надо получить соответствующие этим id данные.
Я попробовал сделать, вот как пример:
<? if(is_array($where))
{
$query="SELECT * FROM otpravka WHERE ".implode(" AND ", $where);
$result=mysql_query($query);
if(mysql_num_rows($result)>0)
{
?>
<table width=100% class=bodytable border=1 align=center cellpadding=5 cellspacing=0 bordercolorlight=gray bordercolordark=white>
<tr class=tableheadercat align="center">
<td width=120><p class=zagtable>Дата отправления</p></td>
<td width=150><p class=zagtable>Станция отправления</p></td>
<td width=150><p class=zagtable>Станция назначения</p></td>
<td width=150><p class=zagtable>Отправитель</p></td>
<td width=150><p class=zagtable>Плательщик</p></td>
<td width=150><p class=zagtable>Наим. груза/код</p></td>
<td width=150><p class=zagtable>Номер вагона</p></td>
<td width=150><p class=zagtable>Собственник</p></td>
<td width=150><p class=zagtable>Действия</p></td>
</tr>
<?php
while ($filter = mysql_fetch_array($result)){
$query="SELECT * FROM data_otprav WHERE id_data_otprav='".$filter['id_data_otprav']."'";
$new = mysql_query($query);
while($nomera = mysql_fetch_array($new)){
echo "<tr>
<td><p class=help align=center>".$nomera['data_otprav']."</p></td>
<td><p class=help align=center>".$filter['id_stan_otpr']."</p></td>
<td><p class=help align=center>".$filter['id_stan_naznach']."</p></td>
<td><p class=help align=center>".$filter['id_otprav']."</p></td>
<td><p class=help align=center>".$filter['id_platil']."</p></td>
<td><p class=help align=center>".$filter['id_gruz']."</p></td>
<td><p class=help align=center>".$filter['id_vagon']."</p></td>
<td><p class=help align=center>".$filter['id_sobstvennik']."</p></td>
</tr>";
}
}
}
else
{
echo "</br> Нет данных, удовлетворяющих установленному фильтру";
}
echo "</table>";
|
Это я сделал только для одной таблицы, а мне еще надо остальные данные таким методом вытащить, уж больно не оптимальная конструкция получается, может есть другой метод, подскажите пожалуйста?
Я прикрепил файл со скриптом поиска.
Заранее благодарен. | |
|
|
|
|
|
|
|
для: cheops
(31.03.2008 в 11:14)
| | Спасибо за оперативную помощь, действительно, вместо сравнения, использовал присваивание.
Еще раз спасибо. | |
|
|
|
|
|
|
|
для: JIyKaBbIu
(31.03.2008 в 10:44)
| | >$_POST['sobstvennik']='-1'
Вероятно вы имели в виду
$_POST['sobstvennik'] == '-1'
|
| |
|
|
|
|
|
|
|
для: cheops
(28.03.2008 в 12:56)
| | Спасибо, за ваш совет, все получилось.
У меня есть еще один вопрос, правда к данной теме относится только тем, что относится к одному проекту.
<td><select name="sobstvennik">
<option value=""></option>
<?
$get_list = @mysql_query("SELECT id_sobstvennik, sobstvennik FROM sobstvennik");
while ($elem = @mysql_fetch_array($get_list))
echo "<option value='$elem[id_sobstvennik]'>$elem[sobstvennik]\n";
?>
<option value="-1">Другой</option>
</select>
<input type="text" name="sobstvennik1">
<?
if($_POST['sobstvennik']='-1')
{
$query="SELECT * FROM sobstvennik WHERE sobstvennik='".$_POST['sobstvennik1']."'";
$dev=mysql_query($query);
if(mysql_num_rows($dev)>0)
{
$nomer=mysql_fetch_array($dev);
$id_sobstvenik=$nomer['id_sobstvennik'];
$errorsobst="<b>данная запись уже есть в базе</b>";
}
else
{
$getmaxid=mysql_query("SELECT MAX(id_sobstvennik) AS id_sobstvennik FROM sobstvennik");
$maxid=mysql_fetch_array($getmaxid);
$id_sobstvenik=$maxid['id_sobstvennik']+1;
if(!empty($_POST['sobstvennik1']))
{
$sql=mysql_query("INSERT INTO sobstvennik VALUES ('".$id_sobstvenik."', '".$_POST['sobstvennik1']."')");
$sobstvennik=$id_sobstvenik;
$errorsobst='';
}
}
}
else
{
$sobstvennik=$_POST['sobstvennik'];
$errorsobst='';
}
echo $sobstvennik;
echo $errorsobst;
?></td></tr>
|
Эта конструкция необходима, чтобы в главную таблицу базы передавался либо id вновь созданного элемента, либо id созданного элемента, в зависимости от того, что выбранного в списке.
Так вот, в случае если элемента нет в списке (выбран элемент списка "другой"), все работает замечательно, запись добавляется в базу, но если выбран любой другой элемент, то $sobstvennik=$_POST['sobstvennik']; не работает, т.е. переменной $sobstvennik не присваивается никакое значение. Не могу понять в чем ошибка, вроде все правильно.
Заранее благодарен за помощь. | |
|
|
|
|
|
|
|
для: JIyKaBbIu
(28.03.2008 в 08:02)
| | Так вы ничего не найдёте, у вас получается запрос вида
SELECT * FROM otpravka WHERE id_kvitotpr='' AND
id_stan_otpr='' AND
id_stan_naznach='' AND
id_otprav='' AND
id_vagon='' AND
id_sobstvennik='' AND
id_gruz='' AND
id_platil=''
|
Т.е. если хотя бы одно условие не указано, сравнение идёт с пустой строкой, которую параметр id_platil принимать не может. Используйте конструкции вида
<?php
...
if(!empty($_POST['platil']))
{
...
$where[] = " id_platil='$id_platil' ";
}
if(is_array($where))
{
$query="SELECT * FROM otpravka WHERE ".implode(" AND ", $where);
}
?>
|
Тогда если условие отсутствует - оно вообще не попадёт в WHERE-конструкцию. | |
|
|
|
|
|
|
|
для: JIyKaBbIu
(28.03.2008 в 10:11)
| | Люди, помогите, срочно нужна помощь. | |
|
|
|
|
|
|
|
для: JIyKaBbIu
(28.03.2008 в 09:43)
| | Причем когда осуществляем поиск, путем выбора значений из списков, не обязательно выбирать значения во всех списках, можно выбрать из только из нескольких или даже из одного. | |
|
|
|
|
|
|
|
для: JIyKaBbIu
(28.03.2008 в 08:02)
| | Хочу внести немного ясности:
в скрипте есть форма добавления новой записи в базу
В этой форме много разных переменных, большинство их реализовано через списки, каждый список - отдельная таблица, так вот 14 таблица хранит в себе результирующие записи по каждой операции с вагоном, каждая запись представляет собой id элементов, выбранных из списков для каждой конкретной записи.
Поиск должен выполняться путем выбора элементов из определенного набора списков (таблиц), и далее результирующий запрос к базе, а точнее к 14 (главной) таблице строится на основе сравнения, всех выбранных id элементов списка, т.е. есть ли совпадения, уже честно говоря сам запутался пытаясь объяснить, но я думаю кто захочет мне помочь, посмотрев прикрепленный архив в первом посте, разберет что к чему, надеюсь на вашу помощь! | |
|
|
|
|