SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.06.2011 20:59:13

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Создание универсального запроса

Привет, всем. Кто подскажет, как можно создать запрос к БД в котором за один мах можно подсчитать и количество записей и вывод результата. К примеру, есть у меня запрос (довольно обширный):

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;

он делает выбору из таблиц и возвращет результат. по времи выполнения он занимает около 1,7с. (многовато).
Можно ли в этом запросе одновременно подсчитать кол-во строк (типа count(*), чтобы не создавать новый запрос к БД, так как время потраченое на запросы существенно замедляет работу???


Дело в том что результат запроса у меня используют две функции:

вот запрос $dos = "SELECT oderAuto.request as request, oderAuto.type as typeauto, ..."
а вот как я использую его 1 запрос:
$jh = mysql_query($dos);
$kolichestvo = mysql_num_rows($jh);

затем второй запрос:
$result = mysql_query($dos);
while ($row = mysql_fetch_assoc($result))
...
нужно объеденить эти два запроса чтобы можно было получить и кол-во строк и самые даные? Можно ли такое реализовать? Спасибо

Неактивен

 

#2 24.06.2011 21:07:14

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Создание универсального запроса

как можно создать запрос к БД в котором за один мах можно подсчитать и количество записей и вывод результата

SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT FOUND_ROWS();
FOUND_ROWS

по времи выполнения он занимает около 1,7с.

Поставь те правильные индексы.

Неактивен

 

#3 26.06.2011 19:47:36

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Re: Создание универсального запроса

Да, забыл вам скать еще одну вещь:
вот тот запрос, который фигурировал изначально выше - есть объеденный запрос, типа
$dos = "SELECT
oderAuto.request as request,
oderAuto.type as typeauto,
oderAuto.groupZapch as groupzapch,
oderAuto.data as data... UNION ALL
SELECT
oderAvtob.request as request,
oderAvtob.type as typeauto,
oderAvtob.groupZapch as groupzapch,
oderAvtob.data as data... "

объеденяется с помощью конструкции UNION ALL - и в конечном итоге имеем 6 запросов. При таком объедененном запросе можно использовать конструкцию FOUND_ROWS???

И как правильно можно все это написать используя FOUND_ROWS практически, при использовании РНР, исходя из приведенного выше примера? Нужно два SELECT прописывать или как? Спасибо.

Отредактированно yuriy (26.06.2011 20:10:38)

Неактивен

 

#4 27.06.2011 01:33:59

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Создание универсального запроса

При таком объедененном запросе можно использовать конструкцию FOUND_ROWS???

Можно. Укажите SQL_CALC_FOUND_ROWS в первом SELECT.

И как правильно можно все это написать используя FOUND_ROWS практически, при использовании РНР, исходя из приведенного выше примера? Нужно два SELECT прописывать или как?

Да, два запроса. Сначала основной, потом - SELECT FOUND_ROWS().

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson