Помощник
|
Создание универсального запроса |
yuriy_hb
|
Сообщение
#1
|
||
|
|
||
|
|||
alexdrob |
24.6.2011, 19:34;
Ответить: alexdrob
Сообщение
#2
|
|
Ну так раз вы возвращаете результат весь то и считайте уже на пхп
mysql_num_rows |
|
|
yuriy_hb
|
Сообщение
#3
|
|
делов в том что результат запроса у меня используют две функции:
вот запрос $dos = "SELECT oderAuto.request as request, oderAuto.type as typeauto, ..." а вот как я использую его: $jh = mysql_query($dos); $kolichestvo = mysql_num_rows($jh); затем: $result = mysql_query($dos); while ($row = mysql_fetch_assoc($result)) ... тоисть к сформированому запросу подключаются две функции. нужно как-то за один раз использовать без лишних запросов к БД??? |
|
|
alexdrob |
24.6.2011, 20:19;
Ответить: alexdrob
Сообщение
#4
|
|
оО, а с чего вы взяли что mysql_num_rows выполняет запрос к бд?
вы же её уже результат отдаёте. я сомневаюсь что она выполняет запрос повторно, иначе она бесполезная. |
|
|
yuriy_hb
|
Сообщение
#5
|
|
вот это один запрос:
$jh = mysql_query($dos); $kolichestvo = mysql_num_rows($jh); а вот это второй запрос: $result = mysql_query($dos); while ($row = mysql_fetch_assoc($result)) ... получается у нас 2 запроса. А нужен один, так как запросы тяжеловатые... |
|
|
alexdrob |
24.6.2011, 20:27;
Ответить: alexdrob
Сообщение
#6
|
|
то есть один и тот же запрос?, для чего? если результат первого запроса вы получили а второй запрос тот же самый. удалите второй и всё :)
|
|
|
yuriy_hb
|
Сообщение
#7
|
|
да, один и тото же запрос используется в разных целях.
Первый раз имеем кол-во строк согласно критерию выборки ($jh = mysql_query($dos); $kolichestvo = mysql_num_rows($jh); а во второй раз выводим результат на лицо с помощью цыкла $result = mysql_query($dos); while ($row = mysql_fetch_assoc($result))... Дело в том что, вот этот запрос: $dos = "SELECT oderAuto.request as request, oderAuto.type as typeauto, ..." в дальнейшем дополняется еще параметрами (как ORDER BY, LIMIT...) в зависимости от настроек в БД. Вот к примеру: if(isset($_REQUEST['sortRequest'])) { $dos = $dos . " ORDER BY request ASC "; } и после прохождения всех этих процедур только затем прводится запрос к БД и затем выводим его в цыкле... |
|
|
yuriy_hb
|
Сообщение
#8
|
|
А подскажите, нельзя как-то в одном запросе извлечь и кол-во строк табл. и результат выборки?
Типа SELECT tab1.NAME, (SELECT COUNT(*) FROM.... Правда ужасный запрос получиться, но другого путя я не вижу, к сожалению... |
|
|
alexdrob |
24.6.2011, 20:55;
Ответить: alexdrob
Сообщение
#9
|
|
А подскажите, нельзя как-то в одном запросе извлечь и кол-во строк табл. и результат выборки? И что вам это даст? Ну извлечёте вы и количество строк и все строки, вопрос, раз вы извлеки все строки зачем вам уже знать их количество? Тем более если вы все строки выбрали в вашем варианте, а потом зачем делать ещё один запрос с лимитом, если у вас уже есть эти строки и даже больше. Количество узнают что бы потом ограничить выборку из базы с помощью limit. Обычно делают так, вначале возвращают количество строк, а потом вторым запросом только несколько строк с помощью limit. первый запрос должен быть как минимум вот таким SELECT count(oderAuto.id) FROM oderAuto INNER JOIN markaauto ON oderAuto.marka = markaauto.id_Marka INNER JOIN modelauto ON oderAuto.model = modelauto.id_Model INNER JOIN groupzap ON oderAuto.groupZapch = groupzap.idGroup INNER JOIN region ON oderAuto.region = region.id_REG LEFT JOIN supportState ON supportState.request = oderAuto.request AND supportState.email = 'mih_76@mail.ru' WHERE oderAuto.timenow >= 9592000; но джоины можно отбросить если в условиях отбора они не участвуют. что то типа [PHP] $sql = "SELECT count(oderAuto.id) FROM oderAuto WHERE oderAuto.timenow >= 9592000"; $count = mysql_result(mysql_query($sql),0); // в переменной $count у вас количество строк, а дальше $sql = "SELECT oderAuto.request as request, oderAuto.type as typeauto, oderAuto.groupZapch as groupzapch, oderAuto.data as data, oderAuto.timenow as timenow, markaauto.marka as marka, modelauto.model as model, groupzap.group as gr, region.city as city, supportState.status as status, supportState.answer as answer, supportState.bookMark as bookMark FROM oderAuto INNER JOIN markaauto ON oderAuto.marka = markaauto.id_Marka INNER JOIN modelauto ON oderAuto.model = modelauto.id_Model INNER JOIN groupzap ON oderAuto.groupZapch = groupzap.idGroup INNER JOIN region ON oderAuto.region = region.id_REG LEFT JOIN supportState ON supportState.request = oderAuto.request AND supportState.email = 'mih_76@mail.ru' WHERE oderAuto.timenow >= 9592000 LIMIT {$start}, {$items_to_page}"; $res = mysql_query($sql); while($row = mysql_fetch_array($res)) { // вывод }[/PHP] |
|
|
yuriy_hb
|
Сообщение
#10
|
|
но в любом случае у нас получается два запроса:
первый: $sql = "SELECT count(oderAuto.id) FROM oderAuto WHERE oderAuto.timenow >= 9592000"; второй: $sql = "SELECT oderAuto.request as request, oderAuto.type as typeauto, .. Верно? |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
как заслужить право на создание новой темы? | 7 | writer80 | 2213 | 12.3.2024, 22:54 автор: Lumex |
|
<Braga/> Создание Telegram-ботов, web-приложений, крипто-бирж, сайтов. | 2 | newbraga | 1800 | 10.3.2024, 22:04 автор: newbraga |
|
СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое | 5 | CULA | 3428 | 19.12.2023, 18:55 автор: CULA |
|
Создание и ведение аккаунтов в соцсетях ("В контакте"/Telegram) Услуги от профессионального журналиста и SMM-менеджера |
2 | AvtorXXX | 1720 | 13.11.2023, 23:47 автор: AvtorXXX |
|
Создание информационной площадки с доской объявлений | 1 | xweb | 2067 | 16.1.2023, 16:25 автор: xweb |
Текстовая версия | Сейчас: 26.4.2024, 2:08 |