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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [MySQL]mysql что лучше JOIN или одиночная выборка 
V
    Опции темы
neoks
Дата 11.1.2013, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всегда интересовал такой вопрос, как улучшить выборку, использую стандартный метод

Код

$select = $sl->db->query('SELECT * FROM `images`LIMIT 5');

while($row = $sl->db->get_row($select)){
    $user = $sl->db->query('SELECT * FROM `users` WHERE id='.$row['cid']);
}


Но наткнулся на JOIN и можно сделать все это одним запросом

Код

$select = $sl->db->query('SELECT * FROM `images`,`users` WHERE images.cid=users.id LIMIT 5');

while($row = $sl->db->get_row($select)){
    print_r($row);
}


Скажите какой из этих вариантов лучше и не будет тормозить бд, склоняюсь к JOIN так как мне кажется чем меньше запросов тем лучше ))

Это сообщение отредактировал(а) neoks - 11.1.2013, 16:13
PM MAIL   Вверх
Arantir
Дата 11.1.2013, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

Репутация: нет
Всего: 55



Чем меньше запросов, тем лучше. Но без фанатизма =)

В первом случае для каждого SELECT будет проводится новый поиск по таблице. В то же время во втором случае, что не сложно заметить, все может быть осуществлено всего лишь за один проход. Итого разница примерно в N раз, где N - количество выбираемых записей.

Это сообщение отредактировал(а) Arantir - 11.1.2013, 16:23


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
neoks
Дата 11.1.2013, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



То есть JOIN тут в самый раз )) еше вопрос такой, скажем мне нужно подсчитать количество записей в разных таблицах, сейчас я юзаю очень просто

Код

SELECT COUNT(id) as count FROM `images` WHERE cid=1


И так для 11 таблиц и того 11 запросов, как тут лучше, будет ли лучше использовать JOIN и вопрос как правильно написать ? )

PM MAIL   Вверх
Aliance
Дата 11.1.2013, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Одним запросом
Код

SELECT COUNT(id) as count, cid FROM `images` GROUP BY cid

получаешь массив count`ов, дальше в цикле выбираешь по нужному cid.

По-моему тема никак не относится к php, вопрос чисто по sql
PM MAIL WWW ICQ Skype   Вверх
neoks
Дата 11.1.2013, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А вот теперь я попал в тупик, скажем нужно объединить 3 таблицы и вытащить только те записи которые мне нужны )

Код

SELECT * FROM `images`,`users` WHERE images.cid=users.id AND images.id = 5 LIMIT 5


Вытаскивает все записи где есть совпадениея images.cid=users.id и добовляет еше записи где images.id

Как ему сказать что нужно вытаскивать только эти images.id и их ID юсеров ? )

Добавлено через 2 минуты и 33 секунды
Цитата(Aliance @  11.1.2013,  17:07 Найти цитируемый пост)
По-моему тема никак не относится к php, вопрос чисто по sql 

Да сори, чет ступил )) не поглядел куда пишу )

Цитата(Aliance @  11.1.2013,  17:07 Найти цитируемый пост)
SELECT COUNT(id) as count, cid FROM `images` GROUP BY cid


Но мне нужно подсчитать из таблицы images,users,pages, и дт все 11 или оставить как есть одни запрос на каждую таблицу ? )

PM MAIL   Вверх
Arantir
Дата 11.1.2013, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

Репутация: нет
Всего: 55



Цитата(neoks @  11.1.2013,  16:12 Найти цитируемый пост)
Как ему сказать что нужно вытаскивать только эти images.id и их ID юсеров ? )

Не очень понял, но вы что, об этом говорите?
Цитата

SELECT images.id, images.cid, users.id  FROM `images`,`users` WHERE images.cid=users.id AND images.id = 5 LIMIT 5


Цитата(neoks @  11.1.2013,  16:12 Найти цитируемый пост)
Но мне нужно подсчитать из таблицы images,users,pages, и дт все 11 или оставить как есть одни запрос на каждую таблицу ? )
Попробуйте 
Код

SELECT images.id, users.id, pages.id  FROM `images`,`users`, `pages`
ну только для всех 11 таблиц сразу

Это сообщение отредактировал(а) Arantir - 11.1.2013, 17:28


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
neoks
Дата 11.1.2013, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ага все разобрался, это я просто не то чет написал и чет коряво отображало, Спасибо за ответы буду дальше оптимизировать запросы ))
PM MAIL   Вверх
Zloxa
Дата 11.1.2013, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Какой милый топик.
Давно с такими не встречался.
Zloxa стирает скупую мужскую слезу умиления.
Спасибо за добрые эмоции.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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