Forum Webscript.Ru
Общие => Базы данных => Тема начата: 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, но видимо руки кривые =((((
-
Во-первых, от нечего делать на работе создал твои таблички, и 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;
-
Я ошибся, не NULL возвращается, а вообще ничего =) Т.е. мне нужно примерно такой результат:
+------------------------+
| kol | name |
+------------------------+
| 3 | catalog 1 |
| 0 | catalog 2 |
+------------------------+
а получаю
+------------------------+
| kol | name |
+------------------------+
| 3 | catalog 1 |
+------------------------+
Вот =(((
-
Так ты мой запрос попробовал????
-
Да, Его результаты и показал
-
Гм. Ты показал 2 разных результата!
-
Да. Первый тот, что хотелось бы получить, второй - то что получается
-
Ты правильно мой запрос пишешь? Почему тогда у меня всё работает???
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)
-
УРА!!! ЗАРАБОТАЛА!!!! СПАСИБО!!!!!
-
Это должно было заработать после первого же моего сообщения. Скажи спасибо, что у нас на работе делать нечего. :)
-
2 Forza
Да, это я ступил. Я таблицы местами перепутал =))) Спасибо что у вас на работе нечего делать =)