powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / запрос на слияние таблиц (видимо просто, но я не знаю)
16 сообщений из 16, страница 1 из 1
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32949797
CTAC2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИТАК.
есть 30 таблиц, состоящих из 3 столбцов каждая.
| id | url | stat |

Необходимо в конце месяца слить данные со всех 30 таблиц в одну со следующим условием:

(*) Если url совпадает, то показатели stat складываются.

Пример:

table1
| 1 | porno.ru | 5 |
| 2 | yandex.ru | 3 |


table2
| 1 | porno.ru | 3 |
| 2 | rambler.ru | 6 |


table итоговая
| 1 | porno.ru | 8 |
| 2 | yandex.ru | 3 |
| 3 | rambler.ru | 6 |
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32949836
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чаво-нить вроде
Код: plaintext
select url, sum(stat) from table1, table2, table3 group by url
------------------
да пребудет с вами гугл!
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32949843
CTAC2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую. Спасибо,маХмо! А можно ли одним запросом еще и сделать INSERT полученного в новую таблицу?
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32949958
CTAC2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал.

Код: plaintext
1.
2.
SELECT url, sum( stat ) 
FROM 2005_03_07_refer, 2005_03_08_refer
group by url

пишет
Код: plaintext
# 1052  - Column: 'url' in field list is ambiguous 

Немного про типы полей, которые исользуются:
1) id smallint, unsigned, primary key, autoincrement
2) url VARCHAR(255)
3) count smallint, unsigned
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32950063
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтож, на халяву не получилось. Но идею ты понял. Вот ещё халявное решение:
Код: plaintext
1.
2.
3.
(select url as url, sum(stat) from table1)
union
(select url as url, sum(stat) from table2)
group by url
------------------
да пребудет с вами гугл!
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32950135
CTAC2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вторым способом тоже не получилось

Код: plaintext
1.
2.
(SELECT url AS url, sum( count ) FROM 2005_03_07_refer) 
UNION ( SELECT url AS url, sum( count ) FROM 2005_03_08_refer ) 
GROUP BY url LIMIT  0  ,  30  

написал:

Код: plaintext
1.
2.
# 1064  - You have an error in your SQL syntax.  
Check the manual that corresponds to your MySQL server 
version for the right syntax to use near 'GROUP  BY url LIMIT 0, 30'

пробовал убрать скобки -

Код: plaintext
1.
# 1140  - Mixing of GROUP columns (MIN(),MAX(),COUNT()...) 
with no GROUP columns is illegal if there is no GROUP BY clause 


Честно говоря, никакой идеи я не понял.
Оба способа, которые ты показал - не работают.


Люди, кто знает конкретное решение проблемы?
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32950182
Pilot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, вот тебе решение влоб.
Твою задачку можно решить в два шага. Сначала скидываем данные во врем. таблицу:

Код: plaintext
create temporary table tmpTable select url, stat from table1 union select url, stat from table2

А после этого делаем нужную нам выборку:
Код: plaintext
select url, sum(stat) from tmpTable group by url

Вот как это оформить одним запросом я не знаю. Тут же нет вложенных запросов..

Для корабля, который не знает куда плыть, нет попутного ветра...
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32950196
CTAC2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подход меня устраивает - пусть будет хоть десять запросов (пока что я это все реализовал через циклы и перл. Ожидаемое число запросов ~ 30 000 =))) )

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

Видимо не такая уж и простая задачка как кажется с виду. =) Pilot
, спасибо за участие.

Очень надеюсь , что мне все-таки подскажут решение, не то наступит конец месяца, и сервер нагнется на 30000 одновременных запросов. =))
Пожалуйста помогите!
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32950228
Pilot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как так не работает? Я ж его проверял! Может, у меня так сервер настроен...
Ладно, тогда первый запрос перепиши так:
Код: plaintext
create temporary table tmpTable select url, stat from table1 union all select url, stat from table2


Для корабля, который не знает куда плыть, нет попутного ветра...
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32950232
Pilot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, смотри, после первого запроса:
mysql> select * from tmpTable;
+------------+------+
| url | stat |
+------------+------+
| porno.ru | 5 |
| yandex.ru | 3 |
| porno.ru | 3 |
| rambler.ru | 6 |
+------------+------+
4 rows in set (0.00 sec)


А вот второй запрос:
mysql> select url, sum(stat) from tmpTable group by url;
+------------+-----------+
| url | sum(stat) |
+------------+-----------+
| porno.ru | 8 |
| rambler.ru | 6 |
| yandex.ru | 3 |
+------------+-----------+
3 rows in set (0.00 sec)


Для корабля, который не знает куда плыть, нет попутного ветра...
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32950283
CTAC2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное тебе спасибо, Pilot.
После вставки all все заработало. В принципе, неплохое рабочее решение (вроде такую вещь можно еще и при помощи merge сделать), но есть недостаток:
Все пихается в одну таблицу, не оптимизировавшись. В итоге, таблица может стать реально большой . Конечно, можно сделать второй запрос, сделать новую таблицу из нее, старую удалить, но это имхо не очень оптимально.


Может есть еще идеи?

Кстати, еще небольшой вопросик:
существует ли запрос, который позволяет узнать, существует ли таблица или нет? (как вариант - получить список таблиц в базе, а дальше перлом уже работать)
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32950286
Pilot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
show tables
Вернет тебе список таблиц в текуще базе.


Для корабля, который не знает куда плыть, нет попутного ветра...
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32950292
Pilot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, если юзаешь MySQL >= MySQL 4.1 - там есть вложенные выборки - можно попробовать все оформить одним запросом. Увы, сам проверить не могу, т.к. у меня MySQL 4.0

существует ли запрос, который позволяет узнать, существует ли таблица или нет?
Посмотри в сторону ф-ции EXISTS() ..

Для корабля, который не знает куда плыть, нет попутного ветра...
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32950996
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если с подзапросом, то:
Код: plaintext
1.
2.
3.
4.
select url, sum(stat) from
(select url, stat from table1
union
select url, stat from table2)
group by url
------------------
да пребудет с вами гугл!
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32951513
Pilot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, пора переходить на новые релизы MySQL - скока новых возможностей и вложенные запросы - яркий тому пример..

Для корабля, который не знает куда плыть, нет попутного ветра...
...
Рейтинг: 0 / 0
запрос на слияние таблиц (видимо просто, но я не знаю)
    #32952038
CTAC2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. если подумать, можно и такое провернуть:


Код: plaintext
1.
2.
create table report select url, sum(stat) from
(select url, stat from table1 union select url, stat from table2)
group by url
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / запрос на слияние таблиц (видимо просто, но я не знаю)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]