|
|
|
| Автоинкрементная таблица 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 указать количество уникальных событий, каждое из которых образовано уникальной комбинацией всех предыдущих параметров. | |
|
|
|
|
|
|
|
для: Владимир55
(10.04.2009 в 21:55)
| | Самый простой вариант - создать дополнительное поле skolko и в цикле тупо пересчитать вхождения. | |
|
|
|
|
|
|
|
для: cheops
(11.04.2009 в 15:26)
| | Но ведь прежде придется создать список уникальных комбинаций параметров!
Как его сделать? | |
|
|
|
|
|
|
|
для: cheops
(11.04.2009 в 15:26)
| | по-моему, цикл не требуется - достаточно применить вложенный подзапрос. | |
|
|
|
|
|
|
|
для: Trianon
(11.04.2009 в 16:24)
| | Каким образом это осуществляется? | |
|
|
|
|
|
|
|
для: Владимир55
(11.04.2009 в 16:42)
| | Составляется SELECT-запрос, подсчитывающий количество строк с уникальной комбинацией полей (очевидно - запрос агрегатной функции COUNT() с группировкой по всем комбинируемым полям)
Далее выполняется попытка включить этот запрос в запрос UPDATE той же таблицы.
Попытка окажется неудачной - сервер не даст модифицировать таблицу, из которой тянет данные подзапрос.
Тогда SELECT запрос подзапросом включается в другой - промежуточный SELECT ... FROM (SELECT ...) . Это приведет к тому, что MYSQL при обработке внутреннего запроса перепишет результат во временную таблицу, освободив таким образом от захвата исходную. Ну и позволит тем самым выполнить UPDATE.
Сам не проверял, но судя по мануалу, должно прокатить.
Хотя вполне может быть, что я какой-то фактор не учел... | |
|
|
|
|
|
|
|
для: Trianon
(11.04.2009 в 17:22)
| | Соственно, такой алгоритм я и реализую в более простых случаях.
"Составляется SELECT-запрос, подсчитывающий количество строк с уникальной комбинацией полей (очевидно - запрос агрегатной функции COUNT() с группировкой по всем комбинируемым полям) "
А вот это и является "камнем преткновения". Англоязычный мануал мне недоступен, а из "Практики создания ВЭБ-сайтов" Кузнецова и Симдянова способ построения такого запроса я не вытащил... | |
|
|
|
|
|
|
|
для: Владимир55
(11.04.2009 в 17:44)
| | SELECT COUNT(*), f1,f2,f3,f4 FROM tbl GROUP BY f1,f2,f3,f4 | |
|
|
|