Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Многофакторные уникальные события
 
 автор: Владимир55   (10.04.2009 в 21:55)   письмо автору
 
 

Автоинкрементная таблица 1 имеет восемь основных полей
data_arh
str_prod
str_vh
p_s
poisk_fr
reff
rekl_set
namerekl


Как преобразовать ее в таблицу 2, которая имеет те же поля плюс поле количества:
data_arh
str_prod
str_vh
p_s
poisk_fr
reff
rekl_set
namerekl
skolko

При этом требуется в поле skolko указать количество уникальных событий, каждое из которых образовано уникальной комбинацией всех предыдущих параметров.

  Ответить  
 
 автор: cheops   (11.04.2009 в 15:26)   письмо автору
 
   для: Владимир55   (10.04.2009 в 21:55)
 

Самый простой вариант - создать дополнительное поле skolko и в цикле тупо пересчитать вхождения.

  Ответить  
 
 автор: Владимир55   (11.04.2009 в 16:06)   письмо автору
 
   для: cheops   (11.04.2009 в 15:26)
 

Но ведь прежде придется создать список уникальных комбинаций параметров!
Как его сделать?

  Ответить  
 
 автор: Trianon   (11.04.2009 в 16:24)   письмо автору
 
   для: cheops   (11.04.2009 в 15:26)
 

по-моему, цикл не требуется - достаточно применить вложенный подзапрос.

  Ответить  
 
 автор: Владимир55   (11.04.2009 в 16:42)   письмо автору
 
   для: Trianon   (11.04.2009 в 16:24)
 

Каким образом это осуществляется?

  Ответить  
 
 автор: Trianon   (11.04.2009 в 17:22)   письмо автору
 
   для: Владимир55   (11.04.2009 в 16:42)
 

Составляется SELECT-запрос, подсчитывающий количество строк с уникальной комбинацией полей (очевидно - запрос агрегатной функции COUNT() с группировкой по всем комбинируемым полям)

Далее выполняется попытка включить этот запрос в запрос UPDATE той же таблицы.
Попытка окажется неудачной - сервер не даст модифицировать таблицу, из которой тянет данные подзапрос.

Тогда SELECT запрос подзапросом включается в другой - промежуточный SELECT ... FROM (SELECT ...) . Это приведет к тому, что MYSQL при обработке внутреннего запроса перепишет результат во временную таблицу, освободив таким образом от захвата исходную. Ну и позволит тем самым выполнить UPDATE.

Сам не проверял, но судя по мануалу, должно прокатить.
Хотя вполне может быть, что я какой-то фактор не учел...

  Ответить  
 
 автор: Владимир55   (11.04.2009 в 17:44)   письмо автору
 
   для: Trianon   (11.04.2009 в 17:22)
 

Соственно, такой алгоритм я и реализую в более простых случаях.

"Составляется SELECT-запрос, подсчитывающий количество строк с уникальной комбинацией полей (очевидно - запрос агрегатной функции COUNT() с группировкой по всем комбинируемым полям) "
А вот это и является "камнем преткновения". Англоязычный мануал мне недоступен, а из "Практики создания ВЭБ-сайтов" Кузнецова и Симдянова способ построения такого запроса я не вытащил...

  Ответить  
 
 автор: Trianon   (11.04.2009 в 18:20)   письмо автору
 
   для: Владимир55   (11.04.2009 в 17:44)
 

SELECT COUNT(*), f1,f2,f3,f4 FROM tbl GROUP BY f1,f2,f3,f4

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования