Я сохраняю товар и порядок в разных таблицах. Я хочу посчитать заказ согласно пункту.
Вот моя структура таблицы.
Таблица 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
Поэтому я принял этот ответ.
Попробуйте вот так
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
Вам не хватает 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`
Вам придется использовать 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 ;