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

Форум MySQL

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

 

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

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

тема: Многотабличный запрос для поиска

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

 
 автор: JIyKaBbIu   (01.04.2008 в 21:36)   письмо автору
 
   для: 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?

   
 
 автор: cheops   (01.04.2008 в 12:14)   письмо автору
 
   для: JIyKaBbIu   (01.04.2008 в 09:41)
 

Лучше так и вытаскивайте - если будете пользоваться многотабличным запросом, то когда данных станет много - он будет слишком долго выполняться. Чтобы сделать код элегантнее - оформите вывод данных для каждой из таблиц в виде отдельной функции.

   
 
 автор: 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>";

Это я сделал только для одной таблицы, а мне еще надо остальные данные таким методом вытащить, уж больно не оптимальная конструкция получается, может есть другой метод, подскажите пожалуйста?
Я прикрепил файл со скриптом поиска.
Заранее благодарен.

   
 
 автор: JIyKaBbIu   (31.03.2008 в 16:22)   письмо автору
 
   для: cheops   (31.03.2008 в 11:14)
 

Спасибо за оперативную помощь, действительно, вместо сравнения, использовал присваивание.
Еще раз спасибо.

   
 
 автор: cheops   (31.03.2008 в 11:14)   письмо автору
 
   для: JIyKaBbIu   (31.03.2008 в 10:44)
 

>$_POST['sobstvennik']='-1'
Вероятно вы имели в виду
$_POST['sobstvennik'] == '-1'

   
 
 автор: JIyKaBbIu   (31.03.2008 в 10:44)   письмо автору
 
   для: 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 не присваивается никакое значение. Не могу понять в чем ошибка, вроде все правильно.
Заранее благодарен за помощь.

   
 
 автор: cheops   (28.03.2008 в 12:56)   письмо автору
 
   для: 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:25)   письмо автору
 
   для: JIyKaBbIu   (28.03.2008 в 10:11)
 

Люди, помогите, срочно нужна помощь.

   
 
 автор: JIyKaBbIu   (28.03.2008 в 10:11)   письмо автору
 
   для: JIyKaBbIu   (28.03.2008 в 09:43)
 

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

   
 
 автор: JIyKaBbIu   (28.03.2008 в 09:43)   письмо автору
 
   для: JIyKaBbIu   (28.03.2008 в 08:02)
 

Хочу внести немного ясности:
в скрипте есть форма добавления новой записи в базу
В этой форме много разных переменных, большинство их реализовано через списки, каждый список - отдельная таблица, так вот 14 таблица хранит в себе результирующие записи по каждой операции с вагоном, каждая запись представляет собой id элементов, выбранных из списков для каждой конкретной записи.
Поиск должен выполняться путем выбора элементов из определенного набора списков (таблиц), и далее результирующий запрос к базе, а точнее к 14 (главной) таблице строится на основе сравнения, всех выбранных id элементов списка, т.е. есть ли совпадения, уже честно говоря сам запутался пытаясь объяснить, но я думаю кто захочет мне помочь, посмотрев прикрепленный архив в первом посте, разберет что к чему, надеюсь на вашу помощь!

   

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

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

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