Как посчитать кол-во строк отдельно в трех разных таблицах одним запросом?
Всем привет.
Возник следующий вопрос, у меня есть 3 таблицы:
track_open, track_link, track_like
Они почти одинаковые по структуре, у каждой есть id, user_id, post_id.
Я хочу посчитать сколько всего открытий, сколько лайков и переходов у каждого нужного мне поста (я хочу через IN () задать сразу несколько post_id).
И при этом получить что то вроде этого:
+---------+--------+------+------+
| post_id | opens | likes | links |
+---------+------- +------+------+
| 55 | 5213 | 123 | 25 |
| 56 | 1263 | 55 | 14 |
+-------- +------- +------+------+
после tabl_1,tabl_2,tabl_3, т.е. так:
SELECT
(SELECT COUNT(*) FROM tabl_1 WHERE post_id IN(чето-там через запятую)) AS t1Count,
(SELECT COUNT(*) FROM tabl_2 WHERE post_id IN(чето-там через запятую)) AS t2Count,
(SELECT COUNT(*) FROM tabl_3 WHERE post_id IN(чето-там через запятую)) AS t3Count
Александр: таким образом посчитается общее кол-во строк из всех указанных в IN постов, мне нужно получить
post_id первый | кол-во открытий | кол-во лайков | кол-во переходов
post_id второй | кол-во открытий | кол-во лайков | кол-во переходов
...
SELECT `post_id`, COUNT(`opens` ) AS opens, COUNT(`likes `) AS likes, COUNT(`links `) FROM tabl_1 WHERE `post_id` IN(чето-там через запятую)
UNION
SELECT `post_id`, COUNT(`opens` ) AS opens, COUNT(`likes `) AS likes, COUNT(`links `) FROM tabl_2 WHERE `post_id` IN(чето-там через запятую)
UNION
SELECT `post_id`, COUNT(`opens` ) AS opens, COUNT(`likes `) AS likes, COUNT(`links `) FROM tabl_3 WHERE `post_id` IN(чето-там через запятую)
или
SELECT * FROM (
SELECT `post_id`, COUNT(`opens` ) AS opens, COUNT(`likes `) AS likes, COUNT(`links `) FROM tabl_1
UNION
SELECT `post_id`, COUNT(`opens` ) AS opens, COUNT(`likes `) AS likes, COUNT(`links `) FROM tabl_2
UNION
SELECT `post_id`, COUNT(`opens` ) AS opens, COUNT(`likes `) AS likes, COUNT(`links `) FROM tabl_3
) WHERE `post_id` IN(чето-там через запятую)
Александр: вы неправильно поняли структуру таблиц, есть 3 таблицы, одна считает лайки, другая открытия, третья переходы. У каждой из этих таблиц есть колонки id, user_id, post_id, + некоторые другие колонки у каждой таблицы, которые не имеют значения в данном вопросе.
Все три таблицы связаны по user_id? если да тогда так:
SELECT
tabl_1.post_id AS post_id,
COUNT(tabl_1,opens) AS opens,
COUNT(tabl_2.likes) AS likes,
COUNT(tabl_3.links) AS links
FROM tabl_1
LEFT JOIN tabl_2 ON tabl_1.user_id=tabl_2.user_id
LEFT JOIN tabl_3 ON tabl_1.user_id=tabl_3.user_id
WHERE tabl_1.post_id IN() GROUP by tabl_1.user_id