Подсчет записей в запросе

134
15 декабря 2016, 15:57

Как посчитать количество записей из дополнительной таблицы?

Есть запрос

$get = mysql_query("
    SELECT 
        * 
    FROM 
        values_to_products 
        LEFT JOIN values ON (value_id = vtp_value_id) 
    WHERE 
        vtp_products_id IN (".implode(',', $pIds).") 
        ".((!empty($ids)) ? " AND vtp_value_id IN (".implode(',', $ids).") " : "")." 
    ORDER BY 
        value_id
");

Мне нужно посчитать сколько products_id из другой таблицы products у которых vtp_value_id = products_value_id и добавить в результат выборки этого запроса как products_count

Я пробовал так. Если делать дополнительно "count(products_id) as products_count", и добавить "GROUP BY vtp_value_id", то считает(!), но результат выборки не тот выходит какой нужен.

Вернуть должно все из таблиц, где могут повторяться vtp_value_id.

Как тут быть? Дополнительный запрос не пойдет, так как итак при в этой части кода делается три запроса.

Answer 1

вынесено из комментариев.

SQL Fiddle

MySQL 5.5 Schema Setup:

drop table if exists `values`;
create table `values` (
  `value_id` int(10) null default null,
  `value_name` varchar(255)
);
drop table if exists `values_to_products`;
create table `values_to_products` (
  `vtp_products_id` int(10) null default null,
  `vtp_value_id` int(10) null default null
);
drop table if exists `products`;
create table `products` (
  `products_id` int(10) null default null,
  `products_value_id` int(10) null default null
);
insert into `values` (`value_id`, `value_name`) values
  (1,'name 1'), (2, 'name 2'), (3, 'name 3'), (4, 'name 4');
insert into `values_to_products` (`vtp_products_id`, `vtp_value_id`) values
  (1, 1), (2, 1), (3, 2), (4, 3), (5, 1), (1, 2);
insert into `products` values
  (1, 1), (2, 1), (3, 2), (4, 2), (5, 1);

Query 1:

SELECT
  vp.*, v.*, count(p.products_id)
FROM
  values_to_products AS vp
LEFT JOIN `values` AS v ON (v.value_id = vp.vtp_value_id)
LEFT JOIN `products` AS p ON (p.products_value_id = vp.vtp_value_id)
WHERE 
  vp.vtp_products_id IN (1,2,3,4) AND 
  vp.vtp_value_id IN (1,2,3,4,1) 
GROUP BY vp.vtp_value_id, vp.vtp_products_id
ORDER BY 
  v.value_id

Results:

| vtp_products_id | vtp_value_id | value_id | value_name | count(p.products_id) |
|-----------------|--------------|----------|------------|----------------------|
|               1 |            1 |        1 |     name 1 |                    3 |
|               2 |            1 |        1 |     name 1 |                    3 |
|               3 |            2 |        2 |     name 2 |                    2 |
|               1 |            2 |        2 |     name 2 |                    2 |
|               4 |            3 |        3 |     name 3 |                    0 |
READ ALSO
Как связать 2 таблицы в MySQL?

Как связать 2 таблицы в MySQL?

Нужно связать 2 таблицы по id

194
Вывод с двух таблиц на одну страницу

Вывод с двух таблиц на одну страницу

Нужно вывести данные из разных таблиц на одну страницуПри чем из одной таблицы все благополучно выводится

141
Целостность данных

Целостность данных

Начал создавать следующую таблицу:

146