Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавить столбец с COUNT строк этой же таблицы, Помогите составить запрос SELECT 
:(
    Опции темы
AlexanderI
Дата 1.11.2006, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.7.2004

Репутация: нет
Всего: 3



Помогите составить запрос:
Есть таблица:

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

--------------------
Магазин детских игрушек  | Авто ВАЗ
PM MAIL   Вверх
Illuminaty
Дата 1.11.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 3
Всего: 56



Код
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`;

PM MAIL ICQ   Вверх
AlexanderI
Дата 1.11.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.7.2004

Репутация: нет
Всего: 3



Цитата(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 запроса....
--------------------
Магазин детских игрушек  | Авто ВАЗ
PM MAIL   Вверх
skyboy
Дата 1.11.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



AlexanderI, подсчет происходит при помощи группировки, при группировке теруются уникальніе значения поля text, остается только количество. как это одним запросо сделать: чтоб и количество посчитало, и чтоб и данные все сохранились?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1096 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.