Forum Webscript.Ru

Общие => Базы данных => Тема начата: Tryapkonator от 19 Января 2005, 11:16:53

Название: GROUP BY
Отправлено: Tryapkonator от 19 Января 2005, 11:16:53
Проблема в следующем. Есть 2 таблицы


           table1
+------------------------+
|  id  |  cat  |  name   |
+------------------------+
|  1   |   1   |   pc1   |
|  2   |   1   |   pc2   |
|  3   |   1   |   pc3   |
+------------------------+

           table2
+------------------------+
|  id  |      name       |
+------------------------+
|  1   |    catalog 1    |
|  2   |    catalog 2    |
+------------------------+

И запрос...
SELECT COUNT(table1.cat) AS kol, table1.name FROM table1, table2 WHERE table1.cat=table2.id GROUP BY table2.id

Мне нужно выдрать количество подкаталогов в каждом каталоге, но если подкаталогов 0, то возвращается NULL, а мне нужно чтоб было 0. Как быть? Пробовал IFNULL, но видимо руки кривые =((((
Название: GROUP BY
Отправлено: Forza от 19 Января 2005, 12:13:45
Во-первых, от нечего делать на работе создал твои таблички, и NULL для пустых каталогов у меня не выводился (для них вообще не было строк в выводе результатов запроса).
Во-вторых, раз ты выводишь результаты относительно каталогов (я понял, инфа о них хранится в table2), то почему в селекте запрашиваешь table1.name?
В-третьих, попробуй вот это:
SELECT COUNT(table1.cat) AS kol, table2.name FROM table2 LEFT JOIN table1 ON table1.cat=table2.id GROUP BY table2.id;
Название: GROUP BY
Отправлено: Tryapkonator от 19 Января 2005, 12:42:33
Я ошибся, не NULL возвращается, а вообще ничего =) Т.е. мне нужно примерно такой результат:

+------------------------+
|  kol  |      name      |
+------------------------+
|  3    |    catalog 1   |
|  0    |    catalog 2   |
+------------------------+

а получаю

+------------------------+
|  kol  |      name      |
+------------------------+
|  3    |    catalog 1   |
+------------------------+

Вот =(((
Название: GROUP BY
Отправлено: Forza от 19 Января 2005, 13:21:42
Так ты мой запрос попробовал????
Название: GROUP BY
Отправлено: Tryapkonator от 19 Января 2005, 13:22:16
Да, Его результаты и показал
Название: GROUP BY
Отправлено: Forza от 19 Января 2005, 13:35:25
Гм. Ты показал 2 разных результата!
Название: GROUP BY
Отправлено: Tryapkonator от 19 Января 2005, 13:47:18
Да. Первый тот, что хотелось бы получить, второй - то что получается
Название: GROUP BY
Отправлено: Forza от 19 Января 2005, 13:53:02
Ты правильно мой запрос пишешь? Почему тогда у меня всё работает???


mysql> select * from table1;
+------+------+------+
| id   | cat  | name |
+------+------+------+
|    1 |    1 | pc1  |
|    2 |    1 | pc2  |
|    3 |    1 | pc3  |
+------+------+------+
3 rows in set (0.28 sec)

mysql> select * from table2;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | catalog 1 |
|    2 | catalog 2 |
+------+-----------+
2 rows in set (0.06 sec)

mysql> select count(table1.cat) as kol, table2.name from table2 left join table1 on table1.cat=table2.id group by table2.id;
+-----+-----------+
| kol | name      |
+-----+-----------+
|   3 | catalog 1 |
|   0 | catalog 2 |
+-----+-----------+
2 rows in set (0.03 sec)
Название: GROUP BY
Отправлено: Tryapkonator от 19 Января 2005, 15:09:50
УРА!!! ЗАРАБОТАЛА!!!! СПАСИБО!!!!!
Название: GROUP BY
Отправлено: Forza от 19 Января 2005, 15:44:38
Это должно было заработать после первого же моего сообщения. Скажи спасибо, что у нас на работе делать нечего. :)
Название: GROUP BY
Отправлено: Tryapkonator от 19 Января 2005, 15:56:15
2 Forza
Да, это я ступил. Я таблицы местами перепутал =))) Спасибо что у вас на работе нечего делать =)