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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Вывод данных
 
 автор: Rustamich   (29.11.2009 в 12:01)   письмо автору
 
 

Здравствуйте!

Возникла такая проблема, нужно вывести количество найденных данных, а затем таблицу с этими данными. Выборка происходит из разных таблиц и циклично, т.е сперва один SELECT, а в нем уже циклом работает другой SELECT, что не позволяет использовать функцию mysql_num_rows().

Пример вывода:
Найдено: Организаций - 5; Адресов - 10.

А ниже таблица с этими организациями и адресами.

Вывод количества найденных данных после таблицы не проблема.

Я делаю так, прогоняю всю выборку, с просчетом количества найденных данных, сама выборка накапливается в переменной. Затем вывожу "Найдено:" количество найденных элементов и после, с помощью echo вывожу ту самую переменную с данными. Но при этом выборка происходит очень долго и при нажатии на поиск висит белый экран, пока не пройдет весь цикл.

Что можно сделать? Как решить эту проблему?

Заранее благодарен за ответ!

  Ответить  
 
 автор: Valick   (29.11.2009 в 12:36)   письмо автору
 
   для: Rustamich   (29.11.2009 в 12:01)
 

эээ... ммм... ну это... начните рассказ не с того что Вы уже натворили, а с того что Вы имеете, т.е. какие таблицы у Вас есть и как организованы связи :)
Может там не нужно столько много запросов и уж точно количество считается по-другому.
ну и подобные темы лучше создавать в разделе по MySQL

  Ответить  
 
 автор: Rustamich   (29.11.2009 в 13:37)   письмо автору
 
   для: Valick   (29.11.2009 в 12:36)
 

Сама выборка данных в таблицу результатов выглядит так:

<?
$total_firms 
0;    $total_address 0;
$query_firms $db->query('SELECT DISTINCT f.firm_id, f.name, c.name AS city FROM firms AS f
  INNER JOIN cities AS c ON f.city_id = c.city_id
  INNER JOIN f_rubrics AS fr ON f.firm_id = fr.firm_id
  INNER JOIN f_address AS fa ON f.firm_id = fa.firm_id
  INNER JOIN rubrics AS r ON fr.rubric_id = r.rubric_id WHERE '
.$where.' ORDER BY '.$orderby);
if (
$db->num_rows($query_firms) > 0) {
  while (
$row_firms $db->get_array($query_firms)) {
    
$total_firms++;
    if (
$total_firms == 0) {$oddclass 'even';} else {$oddclass 'odd';}
    
$firm['id']   = $row_firms['firm_id'];
    
$firm['name'] = $row_firms['name'];
    
$firm['city'] = $row_firms['city'];
    
    
$query_address $db->query('SELECT s.name AS street, fa.house FROM `f_address` AS fa
      LEFT JOIN streets AS s ON fa.street_id  = s.street_id WHERE fa.firm_id='
.$firm['id'].' ORDER BY s.name');
    if (
$db->num_rows($query_address) > 0) {
      
$streets '<ul>'$houses '<ul>';
      while (
$row_address $db->get_array($query_address)) {
        
$total_address++;
        
$address['street'] = $row_address['street'];
        
$address['house'] = $row_address['house'];
        
$streets .= '<li>'.$address['street'].'</li>';
        
$houses .= '<li>'.$address['house'].'</li>';
      }
      
$streets .= '</ul>'$houses .= '</ul>';
    }

    
$query_rubrics $db->query('SELECT r.name AS subrubric FROM `f_rubrics` AS fr
      INNER JOIN rubrics AS r ON fr.rubric_id = r.rubric_id WHERE fr.firm_id='
.$firm['id'].' ORDER BY r.name');
    if (
$db->num_rows($query_rubrics) > 0) {
      
$rubrics '<ul>';
      while (
$row_rubrics $db->get_array($query_rubrics)) {
        
$rubric['subrubric'] = $row_rubrics['subrubric'];
        
$rubrics .= '<li>'.$rubric['subrubric'].'</li>';
      }
      
$rubrics .= '</ul>';
    }
    
    
$list .= '<tr class="'.$oddclass.'" id="str'.$firm['id'].'" onClick="return CheckTR(this);">
      <td class="check"><input type="checkbox" name="id[]" value="'
.$firm['id'].'" id="chb'.$firm['id'].'" onclick="return CheckCB(this);"></td>
      <td class="bold"><a href="?go='
.$this->section.'&page='.$this->subsection.'&action=edit&sort='.$sort.'&id='.$firm['id'].'&rg='.$rgid.'&c='.$cid.'&r='.$rid.'&sr='.$srid.'&n='.$n.'" title="Редактировать">'.$firm['name'].'</a></td>
      <td>'
.$streets.'</td>
      <td class="action" style="width:50px">'
.$houses.'</td>
      <td>'
.$rubrics.'</td>
      <td class="action">'
.$firm['city'].'</td>
      <td class="action"><nobr>
        <a href="?go='
.$this->section.'&page='.$this->subsection.'&action=edit&sort='.$sort.'&id='.$firm['id'].'&rg='.$rgid.'&c='.$cid.'&r='.$rid.'&sr='.$srid.'&n='.$n.'" title="Редактировать" style="margin-right:10px"><img src="img/edit.png" width="18" height="18"/></a>
        <a onclick="return quest(Вы действительно хотите удалить выбранную строку без возможности восcтановления?);"  href="?go='
.$this->section.'&page='.$this->subsection.'&rg='.$rgid.'&c='.$cid.'&r='.$rid.'&sr='.$rid.'&action=delete&id='.$firm_id.'" title="Удалить"><img src="img/delete.png" width="18" height="18"/></a></nobr>
      </td></tr>'
;
  }  
}
?>


Понимаю, $total_firms можно посчитать просто той же mysql_num_rows(), но тут я это делаю для окраски четных и нечетных строк в разные цвета.
Результат вообще выводится так: Фирма, все её адреса, все ею рубрики, город.

Затем я вывожу $total_firms, $total_address и после ту самую переменную $list со списком результатов.

Показываю таблицы в укороченном виде, т.е только те поля, которые используются в запросе


Таблица firms - в ней хранятся сами фирмы
firm_id     int(10)    auto_increment                               
name     varchar(255)                                         
city_id     int(6)                                    

Таблица f_address - в ней хранятся адреса фирм, т.е в одном городе фирма может находиться на разных адресах
f_address_id     int(14)    auto_increment                               
firm_id     int(10)
street_id     int(7)
house     varchar(10)

Таблица f_rubrics - фирма может находиться в разных рубриках
f_rubric_id     int(14) auto_increment                               
firm_id     int(10)                                         
rubric_id     int(5)

Таблица rubrics
rubric_id     int(5) auto_increment                               
name     varchar(100)                                         
parent_id     int(5)

Таблица streets
street_id     int(7) auto_increment                               
name     varchar(50)
city_id     int(6)

Таблица cities
city_id     int(6) auto_increment                               
name     varchar(50)

  Ответить  
 
 автор: Rustamich   (02.12.2009 в 08:21)   письмо автору
 
   для: Rustamich   (29.11.2009 в 13:37)
 

Люди, неужели никто не может помочь?

  Ответить  
Rambler's Top100
вверх

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