ФорумРазработкаБазы данных → Длинные запросы с джойнами

Длинные запросы с джойнами

  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 5 июня 2009 г. 14:52

    В общем, на главную страницу выводятся последние топики.
    Естественно у них есть рейтинг, модераторы, закладки в избранное.

    Вопрос, собственно, вот в чем, так и должно быть, что запросы такие мудреные? или это нормально?

    пример:
    		$query = "SELECT T.*, U.`avatar`, U.`login`, DATE_FORMAT(T.`date`, '%d.%m.%Y %H:%i') AS `my_date`, B.`name` AS `blog_name`, B.`sname` AS `blog_sname`" . ( (isset($_SESSION['user_id'])) ? ", F.`id` AS `favourite`, R.`id` as `rated`, BM.`id` AS `moderator`" : ", '' AS `favourite`, '' AS `rated`" ) . "
    FROM `" . db::table('topics') . "`AS T
    JOIN `" . db::table('blogs') . "` AS B
    ON B.`id`=T.`parent_id`
    LEFT JOIN `" . db::table('users') . "` AS U
    ON T.`author`=U.`id`
    " . ( (isset($_SESSION['user_id'])) ? "
    LEFT JOIN `" . db::table('blogs-moders') . "` AS BM
    ON BM.`blog_id`=B.`id` AND BM.`user_id`={$_SESSION['user_id']}

    LEFT JOIN `" . db::table('topics-fav') . "` AS F
    ON F.`topic_id`=T.`id` AND F.`user_id`={$_SESSION['user_id']}

    LEFT JOIN `" . db::table('topics-rating') . "` AS R
    ON R.`topic_id`=T.`id` AND R.`user_id`={$_SESSION['user_id']}

    " : "" ) . "
    " . ( ($main) ? "WHERE T.`rating`>={$rating_limit}" : "" ) . "
    ORDER BY T.`date` DESC
    LIMIT {$pager['start']}, {$perpage}";

    т.е. в нем мы сразу вытащим — голосовал ли за топик юзер, является ли он модером в блоге топика и добавил ли он топик в избранное

    сразу скажу, замеры не проводил, но если отклеивать джоины и сувать в цикл → думаю, что это бред

    (про вынос DATE_FORMAT не говорить, знаю))
    все умрут, а я изумруд
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 5 июня 2009 г. 15:55, спустя 1 час 3 минуты 4 секунды

    да нормальный запрос
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 5 июня 2009 г. 16:20, спустя 25 минут 19 секунд

    посмотри в эксплейн. + какова скорость и какую скорость хочешь? так то запрос нормальный ибо люой запрос нормальный пока не ограничишь его рамками
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!