Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Случайная выборка без повторов 
:(
    Опции темы
muzer
Дата 29.1.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



Цитата(Gold Dragon @  29.1.2007,  10:21 Найти цитируемый пост)
 вообще-то проверял запросы  и все они выдают только первую запись из таблицы main. Твой кстати тоже.


Я про это тоже писал:

Цитата(muzer @  26.1.2007,  22:51 Найти цитируемый пост)
Да, и в обоих запросах, если в таблицах news, job и comment необязательно присутствуют записи для всех main, то INNER JOIN следует заменить на LEFT JOIN.


PM WWW   Вверх
Gold Dragon
Дата 30.1.2007, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



muzer, большое спасибо... Ну туплю я что-то smile

Именно то что мне нужно!

Вот два варианта
Код

SELECT main.name, main.street, avg( comment.bal ) AS q1, count( DISTINCT news.id ) AS q2, count( DISTINCT job.id ) AS q3, count( DISTINCT comment.id ) AS q4
FROM `main` 
LEFT JOIN `comment` ON main.id = comment.id_kabak
LEFT JOIN `news` ON main.id = news.id_kabak
LEFT JOIN `job` ON main.id = job.id_kabak
GROUP BY main.name, main.street
ORDER BY RAND( ) 
LIMIT 10

Код

SELECT main.name, main.street, avg( comment.bal ) AS q1, count( DISTINCT news.id ) AS q2, count( DISTINCT job.id ) AS q3, count( DISTINCT comment.id ) AS q4
FROM (
SELECT id, name, street
FROM `main` 
ORDER BY RAND( ) 
LIMIT 10 
)main
LEFT JOIN `comment` ON main.id = comment.id_kabak
LEFT JOIN `news` ON main.id = news.id_kabak
LEFT JOIN `job` ON main.id = job.id_kabak
GROUP BY main.name, main.street

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


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
muzer
Дата 30.1.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



Второй работает быстрее поскольку мы сначала из таблицы main выбираем 10 рэндомных записей, а потом уже ищем для них соответствия в других таблицах. А в первом запросе сначала для всех записей из main находятся соответствия в других таблицах, а потом уже от этого всего берётся 10 рэндомных записей.
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0409 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.