Как использовать 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
Author: Marco Souza, 2016-11-02

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   |
+----+----------------+------+-------+
 5
Author: Kiritonito, 2016-11-02 21:12:34

Как я понимаю, вы хотите, чтобы 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.

 0
Author: Giovane, 2016-11-02 21:16:54