Автор Тема: GROUP BY  (Прочитано 6049 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
GROUP BY
« : 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, но видимо руки кривые =((((
« Последнее редактирование: 19 Января 2005, 11:30:29 от Tryapkonator »

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
GROUP BY
« Ответ #1 : 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;

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
GROUP BY
« Ответ #2 : 19 Января 2005, 12:42:33 »
Я ошибся, не NULL возвращается, а вообще ничего =) Т.е. мне нужно примерно такой результат:

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

а получаю

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

Вот =(((

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
GROUP BY
« Ответ #3 : 19 Января 2005, 13:21:42 »
Так ты мой запрос попробовал????

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
GROUP BY
« Ответ #4 : 19 Января 2005, 13:22:16 »
Да, Его результаты и показал

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
GROUP BY
« Ответ #5 : 19 Января 2005, 13:35:25 »
Гм. Ты показал 2 разных результата!

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
GROUP BY
« Ответ #6 : 19 Января 2005, 13:47:18 »
Да. Первый тот, что хотелось бы получить, второй - то что получается

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
GROUP BY
« Ответ #7 : 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)

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
GROUP BY
« Ответ #8 : 19 Января 2005, 15:09:50 »
УРА!!! ЗАРАБОТАЛА!!!! СПАСИБО!!!!!

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
GROUP BY
« Ответ #9 : 19 Января 2005, 15:44:38 »
Это должно было заработать после первого же моего сообщения. Скажи спасибо, что у нас на работе делать нечего. :)

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
GROUP BY
« Ответ #10 : 19 Января 2005, 15:56:15 »
2 Forza
Да, это я ступил. Я таблицы местами перепутал =))) Спасибо что у вас на работе нечего делать =)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28