Как использовать INNER JOIN?
у меня есть таблица с именем event, а другой называется category необходимо подсчитать количество категорий, в предстоящем event->category_id
, но мне нужно, что db поймите и прочитайте category.
TABELAS **event** |**Category_id** || TABELA ||**Category** -------
||
|| title | 2 || name
|| desc | 3 || color
я пробовал таким образом.
SELECT * as event,SELECT COUNT(*) as total from".self::$tablename."
GROUP BY category_id INNER JOIN category ON category.id = category.category.id ";
Кто-нибудь может помочь ?
2 answers
Вам не говорил, что это self::$tableName
.. таблица это? event? category?
Вы хотите подсчитать количество категорий, в таблице событий, но и выбрать соответствующее значение в таблице category? Это было то, что я понял. Давай:
Tabela event:
+--------------+-------------+
| nome | category_id |
+--------------+-------------+
| arroz | 1 |
+--------------+-------------+
| patolino | 1 |
+--------------+-------------+
| chinelo sujo | 2 |
+--------------+-------------+
Tabela category:
+----+----------------+------+
| id | title | desc |
+----+----------------+------+
| 1 | Categoria UM | nada |
+----+----------------+------+
| 2 | Categoria DOIS | ola |
+----+----------------+------+
Вы можете использовать эту query:
SELECT category.*,
(SELECT COUNT(*) FROM event WHERE category_id = category.id) as total
FROM category
Результат будет выглядеть так:
+----+----------------+------+-------+
| id | title | desc | total |
+----+----------------+------+-------+
| 1 | Categoria UM | nada | 2 |
+----+----------------+------+-------+
| 2 | Categoria DOIS | ola | 1 |
+----+----------------+------+-------+
Как я понимаю, вы хотите, чтобы SELECT
, JOIN
между таблицу событий и категорий.
Я Думаю, что это решает:
SELECT
e.title AS event_title,
e.description AS event_description,
c.id AS event_category_id,
c.name AS event_category_name,
c.color AS event_category_color,
c.icon AS event_category_icon
FROM event e
INNER JOIN category c ON
c.id = e.category_id
, Готов в тот же SELECT
вы это ловить как данные события, как и категории его.
Я просто не понимаю часть из всех категорий, вы все еще хотите представить всего категорий зарегистрированных в том же SELECT
?
, Если это не делает много смысла. Было бы лучше сделать другой - SELECT
делать COUNT
категории.
SELECT count(*) FROM category
UPDATE
Хорошо, не имеет смысла, ибо с этой SELECT
, принося события и категорий вместе мы ищем в банке всегда 1 событие, и 1 категории, соответствующей ему строке.
, Если вы хотите, чтобы COUNT
для всех его категориях у вас есть возможность поместить подзапрос в SELECT
приказав ему принести COUNT
см.:
SELECT
e.title AS event_title,
e.description AS event_description,
c.id AS event_category_id,
c.name AS event_category_name,
c.color AS event_category_color,
c.icon AS event_category_icon,
(SELECT COUNT(cc) FROM category cc) AS count_category
FROM event e
INNER JOIN category c ON
c.id = e.category_id
Делая это, вы будете выполнять query SELECT COUNT(cc) FROM category cc
для каждой строки, возвращаемой с события и категории, то есть, если ваш SELECT
событий, тебе принести 10 строк, этот подзапрос будет выполняться 10 раз.
Вы также можете попробовать сделать через LEFT JOIN
RIGHT JOIN
, я не знаю, если будет работать, чтобы быть искренним, но даже тогда вы все равно бы сделать GROUP BY
из других столбцов и всех строк события и категории, придет одинаковое количество COUNT
.