присоединение к подзапросам mysql - PullRequest
0 голосов
/ 07 ноября 2011

Я обращаюсь к данным на моем сайте с помощью 3 запросов, первый запрос получает полный список предложений, доступных на сайте:

  $listingquery = "SELECT * FROM table WHERE city = '$city' AND approved = '1' 
  AND enddate > NOW() ORDER BY id DESC";

, следующий запрос получает количество / список доступных поставщиков сделок:

  $providerquery = "SELECT  programname, category, COUNT(name) FROM table WHERE 
  city = '$city' AND approved='1' AND enddate > NOW() GROUP BY provider"; 

и третий запрос получает количество / список категорий от доступных поставщиков услуг в этом городе:

  $categoryquery = "SELECT  programname, category, COUNT(name) FROM table WHERE 
  city = '$city' AND approved='1' AND enddate > NOW() GROUP BY category";  

есть ли способ объединить все это в 1 запрос?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 08 ноября 2011

Я сомневаюсь, что все это возможно / выполнимо в одном запросе, но в любом случае вы не должны использовать подзапрос в MySQL, это резко снизит производительность. Предпочитайте объединения вместо подзапроса.

0 голосов
/ 07 ноября 2011

Вы можете получить некоторую информацию о потерях, но вы можете попробовать это:

 SELECT * FROM table a
  LEFT JOIN (
    SELECT  programname, category, COUNT(name) 
     FROM table 
     WHERE city = '$city' AND approved='1' AND enddate > NOW() GROUP BY provider
  ) b ON a.provider = b.provider
  LEFT JOIN (
    SELECT  programname, category, COUNT(name) 
     FROM table 
     WHERE city = '$city' AND approved='1' AND enddate > NOW() GROUP BY category
  ) c ON a.category = b.category
  WHERE a.city = '$city' AND a.approved = '1' 
    AND a.enddate > NOW() 
  ORDER BY a.id DESC;

Обновление одним предложением Where (несколько):

 SELECT * FROM table a
  LEFT JOIN (
    SELECT  programname, category, COUNT(name) 
     FROM table 
     WHERE enddate > NOW() GROUP BY provider
  ) b ON a.provider = b.provider
  LEFT JOIN (
    SELECT  programname, category, COUNT(name) 
     FROM table 
     WHERE enddate > NOW() GROUP BY category
  ) c ON a.category = b.category
  WHERE a.city = '$city' AND a.approved = '1' 
    AND a.enddate > NOW() 
    AND b.city = a.city AND c.city = a.city
    AND b.approved = a.approved AND c.approved = a.approved
  ORDER BY a.id DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...