Объединение запросов SELECT MySQL

Discussion in 'PHP' started by Furi, 2 Jan 2012.

  1. Furi

    Furi New Member

    Joined:
    25 May 2011
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Доброго времени суток.
    Допустим, есть таблицы следующего содержания:

    Таблица с информацией о пользователях:
    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.
    Это очень много запросов если выполнять по отдельности. Я понимаю, что после все нужно закэшировать, ибо каждый раз делать столько запросов упадет сервер.

    Возможно как нибудь оптимизировать? Что можете посоветовать?
     
  2. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Используй JOIN.
     
  3. Furi

    Furi New Member

    Joined:
    25 May 2011
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    JOIN здесь не катит. Если достать пользователя по email и к нему JOINить 10 полей из articles потом по каждой articles JOINить поля из LIKES. Получиться огромное дублирование данных.
     
  4. Real1

    Real1 Banned

    Joined:
    28 Dec 2011
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Используй JOIN.++=1
     
  5. xxddz

    xxddz Elder - Старейшина

    Joined:
    2 Oct 2009
    Messages:
    706
    Likes Received:
    365
    Reputations:
    162
    articles с likes можно объединить.Будет меньше запросов.
     
Loading...
Similar Threads - Объединение запросов SELECT
  1. GAiN
    Replies:
    3
    Views:
    7,608