regii
Новичок
Запрос к нескольким таблицам с объединением
Есть несколько таблиц:
2 таблицы A и B с контентом(id, name, date - названия полей в обеих таблицах одинаковое)
1 таблица С с комментариями к элементам A и B(id, element_id-по этому полю связь с A и B, и еще несколько полей)
Необходимо выбрать записи из A и B с наибольшим количеством комментариев, причем сами записи должны быть не старше N дней.
Чтобы выбрать с количеством комментов, делаю так:
Как выбрать c учетом поля date в таблицах A и B в этом же запросе?
И еще вопрос - можно ли объединить в результатах запроса поля A.name и B.name в одно поле(тот же вопрос касается и даты и айдишников этих элементов) и, как я понимаю, подобное объединение позволит сделать WHERE date> в запросе, что повлияет на выборку из всех таблиц?
-~{}~ 09.07.09 13:56:
Получилось таким образом:
SELECT
A.date AS a_date, B.date AS b_date
COUNT(C.id) AS comments_count, A.id AS a_id, A.name AS a_name, A.date AS a_date, B.id AS b_id, B.name AS b_name, B.date AS b_date
FROM C
LEFT JOIN A ON C.element_id=A.id
LEFT JOIN B ON C.element_id=B.id
WHERE a_date < 'first date' OR b_date>'some date'
GROUP BY C.element_id
ORDER BY comments_count
LIMIT 0, 10
Работает, вроде бы, как надо. Единственное что смущает, что в результатах запроса будут присутствовать поля с NULL (или не стоит смущаться?)
Есть несколько таблиц:
2 таблицы A и B с контентом(id, name, date - названия полей в обеих таблицах одинаковое)
1 таблица С с комментариями к элементам A и B(id, element_id-по этому полю связь с A и B, и еще несколько полей)
Необходимо выбрать записи из A и B с наибольшим количеством комментариев, причем сами записи должны быть не старше N дней.
Чтобы выбрать с количеством комментов, делаю так:
PHP:
SELECT COUNT(C.id) AS comments_count, A.id AS a_id, A.name AS a_name, A.date AS a_date, B.id AS b_id, B.name AS b_name, B.date AS b_date
FROM C
LEFT JOIN A ON C.element_id=A.id
LEFT JOIN B ON C.element_id=B.id
GROUP BY C.element_id
ORDER BY comments_count
LIMIT 0, 10
И еще вопрос - можно ли объединить в результатах запроса поля A.name и B.name в одно поле(тот же вопрос касается и даты и айдишников этих элементов) и, как я понимаю, подобное объединение позволит сделать WHERE date> в запросе, что повлияет на выборку из всех таблиц?
-~{}~ 09.07.09 13:56:
Получилось таким образом:
SELECT
A.date AS a_date, B.date AS b_date
COUNT(C.id) AS comments_count, A.id AS a_id, A.name AS a_name, A.date AS a_date, B.id AS b_id, B.name AS b_name, B.date AS b_date
FROM C
LEFT JOIN A ON C.element_id=A.id
LEFT JOIN B ON C.element_id=B.id
WHERE a_date < 'first date' OR b_date>'some date'
GROUP BY C.element_id
ORDER BY comments_count
LIMIT 0, 10
Работает, вроде бы, как надо. Единственное что смущает, что в результатах запроса будут присутствовать поля с NULL (или не стоит смущаться?)