получить количество строк в запросе соединения

Я сохраняю товар и порядок в разных таблицах. Я хочу посчитать заказ согласно пункту.
Вот моя структура таблицы.

Таблица 1: Стол заказов

id | table2_id
1  | 1
2  | 1
3  | 2
4  | 2

Таблица 2: Таблица предметов

id | user_id
1  | 1
2  | 2
3  | 1
4  | 2

Один элемент имеет множественный порядок, как показано в структуре таблицы. Теперь я хочу посчитать заказ как каждый элемент.

Я попытался с помощью соединения, но это дает мне все строки продолжение: 4

SELECT count(Table1.id) as order_count_for_each_item
FROM `Table2` as `t2`
LEFT OUTER JOIN `Table1` as `t2` ON `t1`.`id` = `t2`.`table2_id`;

Но я хочу, чтобы каждый элемент подсчитывал: как для Item1: 2, так и для Item2: 2

Вывод:

Как Рахул предложил это:

SELECT count(*) as order_count_for_each_item
FROM `Table2` as t2
LEFT OUTER JOIN `Table1` as t1 ON `t1`.`table2_id` = `t2`.id
GROUP BY t1.`table2_id`

Этот запрос дает мне результат, который я хочу изначально.

order_count_for_each_item
1  |
2  |

Но ответ, который я принял (Bibhudatta Sahoo), дает мне количество предметов, равное нулю, а также количество предметов по порядку.

SELECT t2.`id`,
(SELECT count(t1.id) form `Table1` as t1
where t2.`id` = t1.`table2_id`) as order_count_for_each_item
FROM `Table2` as t2
group by t2.`id`
order by t2.`id` asc

Item ID |  order_count_for_each_item
1       |   2
2       |   2
3       |   0
4       |   0

Поэтому я принял этот ответ.

2

Решение

Попробуйте вот так

SELECT t2.`id`,
(SELECT count(t1.id) form `Table1` as t1
where t2.`id` = t1.`table2_id`) as order_count_for_each_item
FROM `Table2` as t2
group by t2.`id`
order by t2.`id` asc
1

Другие решения

Вам не хватает group by Вот

SELECT count(*) as order_count_for_each_item
FROM `Table2` as t2
LEFT OUTER JOIN `Table1` as t1 ON `t1`.`table2_id` = `t2`.id
GROUP BY t1.`table2_id`
1

Вам придется использовать aggregate функция Group by, group ваши данные над элементом и получить количество.

SELECT item.id,ifnull(count(order.id),0) as order_count_for_each_item
FROM `Table2` as `item`
LEFT JOIN `Table1` as `order` ON order.table2_id=item.id
group by item.id ;
0
По вопросам рекламы [email protected]