Существуют ситуации, которые требуют, чтобы действительно большой запрос соединял несколько таблиц вместе с операторами выбора в них для получения желаемых результатов.
Мой вопрос заключается в том, следует ли нам рассмотреть возможность использования нескольких небольших запросов и перенести логические операции на уровень приложений, выполняя запросы к БД более чем за один вызов, или лучше иметь их все за один раз?
Например, рассмотрим следующий запрос:
SELECT *
FROM `users`
WHERE `user_id` IN (SELECT f2.`friend_user_id`
FROM `friends` AS f1
INNER JOIN `friends` AS f2
ON f1.`friend_user_id` = f2.`user_id`
WHERE f2.`is_page` = 0
AND f1.`user_id` = "%1$d"
AND f2.`friend_user_id` != "%1$d"
AND f2.`friend_user_id` NOT IN (SELECT `friend_user_id`
FROM `friends`
WHERE `user_id` = "%1$d"))
AND `user_id` NOT IN (SELECT `user_id`
FROM `friend_requests`
WHERE `friend_user_id` = "%1$d")
AND `user_image` IS NOT NULL
ORDER BY RAND()
LIMIT %2$d
Какой лучший способ сделать это?