|
|
|
| Здравствуйте!
Возникла такая проблема, нужно вывести количество найденных данных, а затем таблицу с этими данными. Выборка происходит из разных таблиц и циклично, т.е сперва один SELECT, а в нем уже циклом работает другой SELECT, что не позволяет использовать функцию mysql_num_rows().
Пример вывода:
Найдено: Организаций - 5; Адресов - 10.
А ниже таблица с этими организациями и адресами.
Вывод количества найденных данных после таблицы не проблема.
Я делаю так, прогоняю всю выборку, с просчетом количества найденных данных, сама выборка накапливается в переменной. Затем вывожу "Найдено:" количество найденных элементов и после, с помощью echo вывожу ту самую переменную с данными. Но при этом выборка происходит очень долго и при нажатии на поиск висит белый экран, пока не пройдет весь цикл.
Что можно сделать? Как решить эту проблему?
Заранее благодарен за ответ! | |
|
|
|
|
|
|
|
для: Rustamich
(29.11.2009 в 12:01)
| | эээ... ммм... ну это... начните рассказ не с того что Вы уже натворили, а с того что Вы имеете, т.е. какие таблицы у Вас есть и как организованы связи :)
Может там не нужно столько много запросов и уж точно количество считается по-другому.
ну и подобные темы лучше создавать в разделе по MySQL | |
|
|
|
|
|
|
|
для: 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 % 2 == 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
(29.11.2009 в 13:37)
| | Люди, неужели никто не может помочь? | |
|
|
|