Доброго времени суток. Допустим, есть таблицы следующего содержания: Таблица с информацией о пользователях: Code: CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(25) NOT NULL DEFAULT '', `email` varchar(65) NOT NULL DEFAULT '', `password` varchar(40) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ; Таблица в который будут храниться какие-то публикации пользователей: Code: CREATE TABLE IF NOT EXISTS `articles` ( `id` int(11) NOT NULL AUTO_INCREMENT, `author` int(11) NOT NULL, `title` varchar(255) NOT NULL DEFAULT '', `text` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; И еще допустим таблица со списком пользователей, которым понравилась определенная статья: Code: CREATE TABLE IF NOT EXISTS `likes` ( `id_post` int(11) NOT NULL, `whom` int(11) NOT NULL, UNIQUE KEY `Unique` (`id_post`,`whom`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; Собственно суть вопроса. При загрузке страницы, необходимо отобразить информацию о пользователе, показать все его статьи, и показать кому какая статья понравилась. Но ведь это слишком много запросов. Сначала достать информацию о пользователе, потом получить список статей, и по каждой статье сделать запрос в таблицу likes, чтобы проверить людей которым она понравилась, плюс по этим полученным id загрузить имена опять же из users. Это очень много запросов если выполнять по отдельности. Я понимаю, что после все нужно закэшировать, ибо каждый раз делать столько запросов упадет сервер. Возможно как нибудь оптимизировать? Что можете посоветовать?
JOIN здесь не катит. Если достать пользователя по email и к нему JOINить 10 полей из articles потом по каждой articles JOINить поля из LIKES. Получиться огромное дублирование данных.