Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Считаем строки в таблице

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
byfahrenheit
Отправлено: 24 Сентября, 2011 - 13:12:02
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Добрый день.
Появилась необходимость подсчитать строки, с одинаковыми ID. например:
Есть таблица_1:
id
1
2
3
2
2
3

Нужно подсчитать количество одинаковых ID, и записать в другую таблицу:
id num
1 1
2 3
3 2

Первую часть (т.е. получения количества одинаковых ID) делаю так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id, COUNT(*) FROM TABLE GROUP BY id


А вот как правильно записать все это в другую таблицу, без того, что-бы ставить запрос в цикл - я не знаю. Ибо если поставить запрос в цикл - то с моем случае он будет обрабатывается свыше 80 раз...

(Отредактировано автором: 24 Сентября, 2011 - 13:22:37)

 
 Top
caballero
Отправлено: 24 Сентября, 2011 - 13:24:15
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




insert into table1 (id,cnt) ... SELECT id, COUNT(*) FROM TABLE GROUP BY id

(Отредактировано автором: 24 Сентября, 2011 - 13:24:36)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
MrBeard
Отправлено: 24 Сентября, 2011 - 13:24:50
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id, count(id)
  2. FROM somewhere
  3. GROUP BY id
  4.  

а далее результат построчно вставляешь в другую таблицу
вроде так
(Добавление)
caballero пишет:
insert into table1 (id,cnt) ... SELECT id, COUNT(*) FROM TABLE GROUP BY id

ага, так быстрее)
 
 Top
byfahrenheit
Отправлено: 24 Сентября, 2011 - 13:57:50
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO test (eventId) VALUES ("SELECT eventId, COUNT(eventId) FROM w_records GROUP BY eventId")

я наверно сильно туплю, но сделал так, и в таблицу добавляется все время ноль.

если отдельно выполнить запрос:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT eventId, COUNT(eventId) FROM w_records GROUP BY eventId

то выводит ID и количество (так, как надо), а если подставить в запрос создания/обновления таблицы - то не добавляет данные

(Отредактировано автором: 24 Сентября, 2011 - 13:58:06)

 
 Top
caballero
Отправлено: 24 Сентября, 2011 - 14:04:15
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




ты выбираешь в select два поля а инсертишь одно
я ж написал пример

(Отредактировано автором: 24 Сентября, 2011 - 14:04:51)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
byfahrenheit
Отправлено: 24 Сентября, 2011 - 14:06:14
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




caballero пишет:
ты выбираешь в select два поля а инсертишь одно

в том то и дело, что если сделать так:
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO test (eventId,record_num) VALUES ("SELECT eventId, COUNT(eventId) FROM w_records GROUP BY eventId")

то выдает ошибку:
#1136 - Column count doesn't match value count at row 1
 
 Top
caballero
Отправлено: 24 Сентября, 2011 - 14:15:41
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




я пример для кого написал? Для Пушкина?
чего ты запрос как строку пихаешь?


INSERT INTO test (eventId,record_num) SELECT eventId, COUNT(eventId) FROM w_records GROUP BY eventId


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
byfahrenheit
Отправлено: 24 Сентября, 2011 - 14:29:22
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




caballero пишет:
я пример для кого написал? Для Пушкина?
чего ты запрос как строку пихаешь?


INSERT INTO test (eventId,record_num) SELECT eventId, COUNT(eventId) FROM w_records GROUP BY eventId

Спасибо большое. Теперь работает. Вот только осталось непонятно как теперь сделать обновление строк. Т.е. в таблицу test уже есть все строки с нужными значениями, остается только обновить данные значения.
 
 Top
caballero
Отправлено: 24 Сентября, 2011 - 14:47:11
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




найди доки по синтаксису mysql
полно в инете на русском языке
например есть запрос replace который
либо update либо insert в зависимости от ситуации
и т.д.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
byfahrenheit
Отправлено: 24 Сентября, 2011 - 16:00:36
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




caballero пишет:
найди доки по синтаксису mysql
полно в инете на русском языке
например есть запрос replace который
либо update либо insert в зависимости от ситуации
и т.д.


Сам по себе replace заменяет определенный текст, на другой.
как INSERT - ну насколько я понял он должен добавлять строки.
А вот как сделать Update всего столбца, я помощью запроса выше - понять не могу ...
 
 Top
MrBeard
Отправлено: 24 Сентября, 2011 - 20:52:02
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




byfahrenheit пишет:
caballero пишет:
найди доки по синтаксису mysql
полно в инете на русском языке
например есть запрос replace который
либо update либо insert в зависимости от ситуации
и т.д.


Сам по себе replace заменяет определенный текст, на другой.
как INSERT - ну насколько я понял он должен добавлять строки.
А вот как сделать Update всего столбца, я помощью запроса выше - понять не могу ...


%facepalm%

CODE (SQL):
скопировать код в буфер обмена
  1. REPLACE INTO test (eventId,record_num) SELECT eventId, COUNT(eventId) FROM w_records GROUP BY eventId


или вот так
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. INSERT INTO test (eventId,record_num)
  3.     SELECT eventId, COUNT(eventId) AS eventCount FROM w_records GROUP BY eventId
  4. ON DUPLICATE KEY UPDATE record_num = eventCount
  5.  


и ещё, поле eventId должно быть Primary key или Unique
 
 Top
byfahrenheit
Отправлено: 25 Сентября, 2011 - 13:43:46
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




MrBeard пишет:
byfahrenheit пишет:
caballero пишет:
найди доки по синтаксису mysql
полно в инете на русском языке
например есть запрос replace который
либо update либо insert в зависимости от ситуации
и т.д.


Сам по себе replace заменяет определенный текст, на другой.
как INSERT - ну насколько я понял он должен добавлять строки.
А вот как сделать Update всего столбца, я помощью запроса выше - понять не могу ...


%facepalm%

CODE (SQL):
скопировать код в буфер обмена
  1. REPLACE INTO test (eventId,record_num) SELECT eventId, COUNT(eventId) FROM w_records GROUP BY eventId


или вот так
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. INSERT INTO test (eventId,record_num)
  3.     SELECT eventId, COUNT(eventId) AS eventCount FROM w_records GROUP BY eventId
  4. ON DUPLICATE KEY UPDATE record_num = eventCount
  5.  


и ещё, поле eventId должно быть Primary key или Unique


Спасибо большое!) Делал как Вы указали в первом варианте, но видимо не работало из-за того, что поле eventId было обычным (не Primary)

Возникла еще одна задача. Дабы не создавать новую тему, спрошу тут:
есть таблица:
номер трассы____название трассы____баллы____имя водителя____Номер позиции
1______________Трасса №1_________12124_____Водитель 1______
3______________Трасса №3_________25412_____Водитель 2______
1______________Трасса №1_________24242_____Водитель 2______
2______________Трасса №2_________24521_____Водитель 3______
3______________Трасса №3_________12242_____Водитель 1______
2______________Трасса №2_________25424_____Водитель 2______
1______________Трасса №1_________31221_____Водитель 3______
3______________Трасса №3_________21242_____Водитель 1______
1______________Трасса №1_________24254_____Водитель 3______
2______________Трасса №2_________24524_____Водитель 1______
3______________Трасса №3_________15424_____Водитель 2______
2______________Трасса №2_________25423_____Водитель 1______

Суть проблемы заключается в том, что: надо сортировать все трассы по номеру трассы, после чего по рейтингу. Дальше надо выбрать определенного водителя (пускай это будет "водитель 1"), и выставить ему позицию на данной трассе. Так надо сделать для каждой трассы (у меня их будет от 50 до 150), и полученные данные вставить/обновить в "Номер позиции", которая находится в данной таблице, естественно соответствуя имени водителя и номеру трассы.

Прошу прощения за глупые вопросы. Совсем недавно начал учить php и sql. Поэтому в принципе знаю как реализовать данное дело, но в таком случае надо пихать запрос в цикл, а это не желательно. Заранее благодарю за любую помощь. Улыбка
 
 Top
byfahrenheit
Отправлено: 25 Сентября, 2011 - 18:42:25
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




по поводу последнего - сделал сам Улыбка
Благодарю всех за помощь Подмигивание
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB