JOINы или несколько циклов

woowap

Новичок
Здравствуйте! Я как то раз слышал, от одного программиста, что жоинами в mysql лучше не пользоваться,что лучше использовать несколько циклов и т.п., вот я не могу разобраться, если есть знающие, хорошо понимающие, подскажите пожалуйста, вот внизу код:


Код:
// собираем иды, куда я подписан и новые сообщения в них
        $q = mysql_query("SELECT `theme_id`, `new_msg` FROM `forum_follow` WHERE `user_id` = '$user_id' LIMIT {$n->start()}, 10");
        while($res = mysql_fetch_assoc($q))
        {
            $theme_ids[] .= $res['theme_id'];
            $new_msg_theme[$res['theme_id']] = $res['new_msg'];
        }

        // собираем темы, по идам, которые собрали выше, с подписок
        $q = mysql_query("SELECT `user_id`, `theme_id`, `name`, `forum_id`, `count_msg`, UNIX_TIMESTAMP(date) date FROM `forum_themes` WHERE `theme_id` IN(" . implode(',', $theme_ids) . ")");
        while($res = mysql_fetch_assoc($q))
        {
            $user_ids[] .= $res['user_id'];
            $theme_data[] = $res;
        }

        // берем данные юзеров, которые создали эти темы
        $q = mysql_query("SELECT `user_id`, `login`, `color` FROM `users` WHERE `user_id` IN (" . implode(',', $user_ids) . ")");
        while($res = mysql_fetch_assoc($q))
        {
            $user_data[$res['user_id']] = $res;
        }


        foreach($theme_data as $res)
        {
          // тут все уже выводится
        }
как по вашему лучше, использовать так, или же сделать это одним запросом в JOINE
 

woowap

Новичок
Он идиот. Не слушай его больше.

Хотя на практике данный подход применяется. Но не для того чтобы оправдать говнокод типа этого.
Код:
$q = mysql_query("SELECT FL.theme_id, FL.new_msg, FT.name, FT.count_msg, US.login FROM `forum_follow` FL
        LEFT JOIN `forum_themes` FT USING(`theme_id`)
        LEFT JOIN `users` US ON FT.user_id = US.user_id
        WHERE FL.user_id = '$user_id' LIMIT {$n->start()}, 10");

        while($res = mysql_fetch_assoc($q))
        {
                 //вывод
                 }
вот так будет лучше чем 3 цикла?
в таблице users много записей. от 100к
 

Фанат

oncle terrible
Команда форума
Посмотри EXPLAIN для этого запроса.
Должно быть все норм.

Кстати, на будущее. Функция mysql_query уже год, как удалена из языка РНР.
 

Фанат

oncle terrible
Команда форума
Я уж не знаю, как надо гуглить но по ссылке php.net/mysql_query русским по красному написано
Данное расширение устарело, начиная с версии PHP 5.5.0, и удалено в PHP 7.0.0.
Версия 7.0.0 вышла год назад, поддержка всего остального прекратится в течение года.
 

woowap

Новичок
Я уж не знаю, как надо гуглить но по ссылке php.net/mysql_query русским по красному написано

Версия 7.0.0 вышла год назад, поддержка всего остального прекратится в течение года.
Спасибо огромное! Теперь понял, просто я искал не так, думал именно будет где то написано слово удалено)
 
Сверху