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
Форумы портала PHP.SU :: Версия для печати :: Считаем строки в таблице
Форумы портала PHP.SU » » Работа с СУБД » Считаем строки в таблице

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

1. byfahrenheit - 24 Сентября, 2011 - 13:12:02 - перейти к сообщению
Добрый день.
Появилась необходимость подсчитать строки, с одинаковыми 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 раз...
2. caballero - 24 Сентября, 2011 - 13:24:15 - перейти к сообщению
insert into table1 (id,cnt) ... SELECT id, COUNT(*) FROM TABLE GROUP BY id
3. MrBeard - 24 Сентября, 2011 - 13:24:50 - перейти к сообщению
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

ага, так быстрее)
4. byfahrenheit - 24 Сентября, 2011 - 13:57:50 - перейти к сообщению
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 и количество (так, как надо), а если подставить в запрос создания/обновления таблицы - то не добавляет данные
5. caballero - 24 Сентября, 2011 - 14:04:15 - перейти к сообщению
ты выбираешь в select два поля а инсертишь одно
я ж написал пример
6. byfahrenheit - 24 Сентября, 2011 - 14:06:14 - перейти к сообщению
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
7. caballero - 24 Сентября, 2011 - 14:15:41 - перейти к сообщению
я пример для кого написал? Для Пушкина?
чего ты запрос как строку пихаешь?


INSERT INTO test (eventId,record_num) SELECT eventId, COUNT(eventId) FROM w_records GROUP BY eventId
8. byfahrenheit - 24 Сентября, 2011 - 14:29:22 - перейти к сообщению
caballero пишет:
я пример для кого написал? Для Пушкина?
чего ты запрос как строку пихаешь?


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

Спасибо большое. Теперь работает. Вот только осталось непонятно как теперь сделать обновление строк. Т.е. в таблицу test уже есть все строки с нужными значениями, остается только обновить данные значения.
9. caballero - 24 Сентября, 2011 - 14:47:11 - перейти к сообщению
найди доки по синтаксису mysql
полно в инете на русском языке
например есть запрос replace который
либо update либо insert в зависимости от ситуации
и т.д.
10. byfahrenheit - 24 Сентября, 2011 - 16:00:36 - перейти к сообщению
caballero пишет:
найди доки по синтаксису mysql
полно в инете на русском языке
например есть запрос replace который
либо update либо insert в зависимости от ситуации
и т.д.


Сам по себе replace заменяет определенный текст, на другой.
как INSERT - ну насколько я понял он должен добавлять строки.
А вот как сделать Update всего столбца, я помощью запроса выше - понять не могу ...
11. MrBeard - 24 Сентября, 2011 - 20:52:02 - перейти к сообщению
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
12. byfahrenheit - 25 Сентября, 2011 - 13:43:46 - перейти к сообщению
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. Поэтому в принципе знаю как реализовать данное дело, но в таком случае надо пихать запрос в цикл, а это не желательно. Заранее благодарю за любую помощь. Улыбка
13. byfahrenheit - 25 Сентября, 2011 - 18:42:25 - перейти к сообщению
по поводу последнего - сделал сам Улыбка
Благодарю всех за помощь Подмигивание

 

Powered by ExBB FM 1.0 RC1