Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Добавить столбец с COUNT строк этой же таблицы


Автор: AlexanderI 1.11.2006, 12:35
Помогите составить запрос:
Есть таблица:

id  | text   | ref
-----------------
 1  | text1 | NULL
 2  | text2 | 1
 3  | text3 | 1
 4  | text4 | NULL
 5  | text5 | 4

Нужно к строкам где "ref=NULL" добавить столбец counts с суммой строк где ref=id.
Т.е. в таблице идёт связь:
1 ->2,3
4 ->5

вывести вот такое:

id  | text   |  ref     |  counts
-------------------------------
 1  | text1 | NULL  |  2
 2  | text2 | 1        |  0
 3  | text3 | 1        |  0
 4  | text4 | NULL  |  1
 5  | text5 | 4        |  0
 6  | text6 | NULL  |  0

Автор: Illuminaty 1.11.2006, 14:08
Код
ALTER TABLE `test` ADD `counts` INT DEFAULT '0' NOT NULL ;
CREATE TEMPORARY TABLE IF NOT EXISTS `temp` (
KEY ( `temp_id` )
) SELECT `id` as `temp_id` , COUNT( `ref` ) as `counts`
FROM `test`
GROUP BY `ref`;
UPDATE `test`, `temp` SET `test`.`counts`=`temp`.`counts` WHERE `id`=`temp_id`;
DROP TEMPORARY TABLE `temp`;

Автор: AlexanderI 1.11.2006, 14:11
Цитата(Illuminaty @ 1.11.2006,  14:08)
Код
ALTER TABLE `test` ADD `counts` INT DEFAULT '0' NOT NULL ;
CREATE TEMPORARY TABLE IF NOT EXISTS `temp` (
KEY ( `temp_id` )
) SELECT `id` as `temp_id` , COUNT( `ref` ) as `counts`
FROM `test`
GROUP BY `ref`;
UPDATE `test`, `temp` SET `test`.`counts`=`temp`.`counts` WHERE `id`=`temp_id`;
DROP TEMPORARY TABLE `temp`;

Ух ё. smile
А попроще, одним запросом можно сделать как-нибудь ?
Без временных таблиц. А то получилось 3 запроса....

Автор: skyboy 1.11.2006, 14:18
AlexanderI, подсчет происходит при помощи группировки, при группировке теруются уникальніе значения поля text, остается только количество. как это одним запросо сделать: чтоб и количество посчитало, и чтоб и данные все сохранились?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)