MySQL левое соединение и второй выбор для подсчета - PullRequest
2 голосов
/ 02 апреля 2012

У меня есть следующие таблицы:

страницы :

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| page_id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| type       | varchar(20)  | NO   |     | NULL    |                |
| parent_id  | int(11)      | NO   |     | NULL    |                |
| title      | varchar(255) | NO   | MUL | NULL    |                |
| text       | longtext     | NO   | MUL | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

custom :

+---------+------------------+------+-----+---------+-------+
| Field   | Type             | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+-------+
| page_id | int(10) unsigned | NO   | PRI | NULL    |       |
| key     | varchar(255)     | NO   | PRI | NULL    |       |
| value   | longtext         | NO   |     | NULL    |       |
+---------+------------------+------+-----+---------+-------+

WhitВ следующем запросе я получаю все записи из таблицы pages где type = 'questions' и получаю значения из таблицы custom где key = 'votes'.

Проблема в следующем.В таблице страниц я хочу подсчитать все записи с помощью type = 'comments' AND parent_id = 'page_id'

SELECT * FROM pages AS P  
LEFT JOIN custom AS C
    ON P.page_id = C.page_id AND  
        C.key = 'votes'
WHERE  
    P.type = 'questions'  
ORDER BY P.date DESC, C.value DESC

Проблема в том, что мне нужно вставить куда-то SELECT COUNT(*) AS posts_count FROM pages WHERE page_id = parent_id и значение из posts_count должен быть доступен в запросе, потому что я хочу упорядочить записи по порядку комментариев И после этого по голосам из таблицы custom

1 Ответ

0 голосов
/ 06 февраля 2013

Похоже, вы могли бы использовать подзапрос для, чтобы получить этот результат:

SELECT p1.page_id,
  p1.type,
  p1.parent_id,
  p1.title,
  p1.text,
  Coalesce(p2.TotalComments, 0) TotalComments,
  c.key,
  c.value
FROM pages AS P1
LEFT JOIN
(
  select count(*) TotalComments, parent_id
  from pages
  where type = 'comments'
  group by parent_id
) p2
  on p1.parent_id = p2.parent_id
LEFT JOIN custom AS C
  ON P1.page_id = C.page_id 
  AND C.key = 'votes'
WHERE P.type = 'questions'  
ORDER BY P1.date DESC, C.value DESC
...