подсчет количества

589
04 января 2017, 02:30

link: default null, но значение notNULL. Структура таблиц, значение по умолчанию

Всегда при не простых запросах у меня возникают проблемы с агрегативными функиями :(

mysql> describe usopt;
  +---------------+---------------------+------+-----+------------------------------------------+
  | Field         | Type                | Null | Key | Default                                  |
  +---------------+---------------------+------+-----+------------------------------------------+
  | uid_usopt     | int(10) unsigned    | NO   | PRI | NULL                                     |
  | usname        | varchar(25)         | NO   |     | NULL                                     |
  | skinid_usopt  | int(10) unsigned    | NO   |     | 1                                        |

mysql> describe skin;
+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| skinid       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| skin_name    | varchar(32)      | NO   |     | NULL    |                |
| uid_skinfrom | int(10) unsigned | NO   | MUL | NULL    |                |
| skin_way     | varchar(32)      | NO   |     | NULL    |                |
| date_skin    | int(10) unsigned | NO   | MUL | NULL    |                |
//////////////////////////////////////////////////////////////////////////
uid_usopt=uid_skinfrom
skinid=skinid_usopt

А как сделать подсчет в одном запросе?

UPD Удалил подробное описание вопроса.

Answer 1

Да. Группировка решила проблему

mysql> select skin_name,uid_skinfrom,date_skin,usname,count(skinid) from skin join usopt on skinid=skinid_usopt group by skin_name;
+------------+--------------+------------+----------------------------------------------------+---------------+
| skin_name  | uid_skinfrom | date_skin  | usname                                             | count(skinid) |
+------------+--------------+------------+----------------------------------------------------+---------------+
| default    |         8736 | 1294967295 | WWWWWWWWWWWWW                                      |            23 |
| number4    |         8739 | 1294967295 | User8748                                           |             3 |
| pink       |         8740 | 1294967295 | User8738                                           |             6 |
| standart   |         8737 | 1294967295 | ффффффввввввввввааааааааа                          |             2 |
| пятый      |         8736 | 1499969514 | User8751                                           |             2 |
+------------+--------------+------------+----------------------------------------------------+---------------+
5 rows in set (0.00 sec)
mysql> select skin_name,uid_skinfrom,date_skin,usname,count(skinid_usopt) from skin join usopt on skinid=skinid_usopt group by skin_name;
+------------+--------------+------------+----------------------------------------------------+---------------------+
| skin_name  | uid_skinfrom | date_skin  | usname                                             | count(skinid_usopt) |
+------------+--------------+------------+----------------------------------------------------+---------------------+
| default    |         8736 | 1294967295 | WWWWWWWWWWWWW                                      |                  23 |
| number4    |         8739 | 1294967295 | User8748                                           |                   3 |
| pink       |         8740 | 1294967295 | User8738                                           |                   6 |
| standart   |         8737 | 1294967295 | ффффффввввввввввааааааааа                          |                   2 |
| пятый      |         8736 | 1499969514 | User8751                                           |                   2 |
+------------+--------------+------------+----------------------------------------------------+---------------------+
5 rows in set (0.00 sec)
mysql> 

но осталось обдумать как и что делать с теми скинами что отсутствуют в usopt.

Все оказалось так просто. Но книгу Грубера (грабера) хочу купить!

ураа. Я решил "проблему" с подсчетом (точнее с выводом) тех скинИД, который нет в тбл usopt. Я думал отложить на утро\день решение этого. НО ... Все оказалось так просто! Хотя осталось по мелочам доработать запрос (или\и php код).

  mysql> select skin_name,uid_skinfrom,date_skin,usname,count(skinid_usopt) from skin left join usopt on skinid=skinid_usopt group by skinid;
  +------------+--------------+------------+----------------------------------------------------+---------------------+
  | skin_name  | uid_skinfrom | date_skin  | usname                                             | count(skinid_usopt) |
  +------------+--------------+------------+----------------------------------------------------+---------------------+
  | default    |         8736 | 1294967295 | WWWWWWWWWWWWW                                      |                  23 |
  | pink       |         8740 | 1294967295 | User8738                                           |                   6 |
  | standart   |         8737 | 1294967295 | ффффффввввввввввааааааааа                          |                   2 |
  | number4    |         8739 | 1294967295 | User8748                                           |                   3 |
  | пятый      |         8736 | 1499969514 | User8751                                           |                   2 |
  | 666666666  |         8753 |          0 | NULL                                               |                   0 |
  +------------+--------------+------------+----------------------------------------------------+---------------------+
  6 rows in set (0.00 sec)
  mysql> 

upd Сделал еще проще: в таблице храню количество. При использовании пользователем скина, в полеКоличества табл +1 для нового скина. А для старого -1. В решении с группировкой была проблема получения имени пользователя.

Это снимает нагрузку из другой таблицы (не нужно каждый раз шерстить таблицу и считать количество). Так как ВСЕ-все понятно только мне, я дам простой совет: Если вы долго над чем-то ломаете голову... отдохните пру минут (часов), НЕ ДУМАЯ, о проблеме. и снова в бой: НУЖНО как можно более все упрощать. Что-то хотел еще написать (по теме), но забыл :(

READ ALSO
Поиск пропавших дуг для полного графа

Поиск пропавших дуг для полного графа

Дана таблица в которой перечислены все дуги связного ориентированного графаВ таблице два числовых поля, в первом указана начальная вершина...

455
Как осуществить скроллинг с блоками?

Как осуществить скроллинг с блоками?

Вот, к примеру, есть всего 10 достаточно больших блоков с каким-либо фоном, которые не умещаются на экранеВ строке по 2 таких блока

467
Jsoup с одними сайтами работает, с другими - нет

Jsoup с одними сайтами работает, с другими - нет

Здравствуйте! Стал интересен парсинг html-страниц, начал разбираться с Jsoup, почитал несколько довольно стареньких гайдов по этому поводу(там...

663
Mockito тестировние void метода

Mockito тестировние void метода

Тестируемый метод

744