bash и mysql

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

Модераторы: SLEDopit, Модераторы разделов

pelmen
Сообщения: 1268
ОС: debian

bash и mysql

Сообщение pelmen »

Есть таблица table1 (int gid, int uid)
как можно сделать в скрипте (bash) операцию, которая делала бы новую таблицу table2 (int gid, int summ) где summ - сумма uid, которые были в gid ?
т.е. в первой таблице
1 1
1 2
1 3
2 1
2 2
значит во второй будет
1 3
2 2
Просто с mysql не особо :)
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: bash и mysql

Сообщение IMB »

pelmen, возможно так:

user@localhost

mysql> create temporary table table1 (gid int, uid int); mysql> insert into table1 (gid, uid) values (1,1),(1,2),(1,3),(2,1),(2,2); mysql> select * from table1; +------+------+ | gid | uid | +------+------+ | 1 | 1 | | 1 | 2 | | 1 | 3 | | 2 | 1 | | 2 | 2 | +------+------+ mysql> create temporary table table2 select gid, count(uid) from table1 group by gid; mysql> select * from table2; +------+------------+ | gid | count(uid) | +------+------------+ | 1 | 3 | | 2 | 2 | +------+------------+

Хотя, строго говоря, это не сумма, это подсчет количества.
Для суммы, примерно, так.

user@localhost

mysql> create temporary table table2 select gid, sum(uid) from table1 group by gid; mysql> select * from table2; +------+----------+ | gid | sum(uid) | +------+----------+ | 1 | 6 | | 2 | 3 | +------+----------+
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: bash и mysql

Сообщение drBatty »

pelmen писал(а): ↑
20.05.2009 21:57
как можно сделать в скрипте (bash) операцию, которая делала бы новую таблицу table2 (int gid, int summ) где summ - сумма uid, которые были в gid ?
т.е. в первой таблице

посчитать строки? wc
уже писал ведь...
эх...
в uniq даже ключик -c для вас придумали :(
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: bash и mysql

Сообщение pelmen »

IMB писал(а): ↑
20.05.2009 23:23
Для суммы, примерно, так.

user@localhost

mysql> create temporary table table2 select gid, sum(uid) from table1 group by gid; mysql> select * from table2; +------+----------+ | gid | sum(uid) | +------+----------+ | 1 | 6 | | 2 | 3 | +------+----------+
Т.е. создаем таблицу, но не перечисляя столбцы и их типы, а обычный select из другой таблицы? отлично, то, что нужно. А как потом добавлять в эту таблицу2 обновленные значения?
Т.е. у нас в таблице 1 появились еще записи
3 1
3 2
4 1
5 1
Вот добавить их нужно теперь в таблицу 2, чтоб получилось
1 3
2 2
3 2
4 1
5 1
Делать новую таблицу, исходя из запроса по полной таблице 1 не хотелось бы, т.к. в неё миллион записей в месяц добавляется :) (сейчас там 7,076,741 записей)
Таблицу 2 собираюсь обновлять каждую ночь (исходя из новых записей в первой таблице за день)
Работать с исходной таблицей не получается из-за большого количества полей, по-этому я и хочу делать новую таблицу.
По аналогии что-то типа того нужно: INSERT INTO table2 (gid,uid) select gid, count(uid) from table1 group by gid;
Проверять, новые данные, или они уже добавлены, буду проверять с помощью timestamp, он там тоже есть в таблице 1.
Да, кстати, я надеюсь данные в таблицк 2 при этом будут статичны, и при удалении таблицы 1 они останутся? (больше меня волнует, чтобы при выводе таблицы 2 не происходил перебор данных из таблицы 1)
а то малоли... :)

Проверил !!!
insert into table2 select gid, count(uid) from table1 group by gid;
Все работает. Потом делаю drop table table1; show * drom table2; и все на месте. Всем спасибо, все вопросы отпали!
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: bash и mysql

Сообщение IMB »

pelmen
Исходя из описанной задачи, я бы советовал бы Вы посмотреть в сторону тригеров или view-таблиц.
Тригеры позволят Вам автоматически обновлять table2 при изменении table1. View-таблица - это фактически запрос select к целевой таблице, table1, но данные Вы смотрите в другой таблице, table 2, выгодно если выборка из table1 имеет сложный запрос.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: bash и mysql

Сообщение pelmen »

Может быть этот способ был бы удобнее, но мне кажется, что в таком случае я не решу главной проблемы.
Я писал вэб-морду, обрабатывающую таблицу1, все работало нормально, пока записей не стало 1 млн, и морда моя начала выдавать ошибку, типа "30 сек ожидания ни к чему не привели".
Вот я и решил переделать веб-морду, переориентировав её на другую таблицу, где данных будет меньше. По-этому мне кажется, что при использовании триггеров или view-таблиц у меня опять-таки будет "30-секундная проблема"
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: bash и mysql

Сообщение drBatty »

pelmen писал(а): ↑
21.05.2009 10:47
Вот я и решил переделать веб-морду, переориентировав её на другую таблицу, где данных будет меньше. По-этому мне кажется, что при использовании триггеров или view-таблиц у меня опять-таки будет "30-секундная проблема"

видимо да...
вам тогда нужно кешировать, что-бы 30секундная проблема была один раз, а потом выдавать всем результаты кеша.
т.е. любой запрос на вставку в большую таблицу увеличивает одно поле в одной строчки малой таблицы.
igorif писал(а): ↑
21.05.2009 10:47
Е почему засоряете мою тему!!??

:)
через ssh можно что угодно. А того что нельзя - тоже можно, набераешь su и пароль рута, и тогда точно всё можно :)
другое дело, что это shell, потому вам надо набрать mysql -u Юзер -p
ну и пароль к юзеру.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: bash и mysql

Сообщение IMB »

pelmen писал(а): ↑
21.05.2009 10:47
Вот я и решил переделать веб-морду, переориентировав её на другую таблицу, где данных будет меньше. По-этому мне кажется, что при использовании триггеров или view-таблиц у меня опять-таки будет "30-секундная проблема"

На мой взгляд теряется смысл в базе. Я бы начал с оптимизации таблиц, анализа запросов и скриптов. Возможно следует задумать о переходе на другую базу или сервер.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: bash и mysql

Сообщение drBatty »

IMB писал(а): ↑
21.05.2009 11:52
На мой взгляд теряется смысл в базе. Я бы начал с оптимизации таблиц
я и предлагаю оптимизацию....
сделать вторую таблицу с "суммами" строк.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: bash и mysql

Сообщение pelmen »

Если речь идет об изменении большой таблицы, и изначально в неё записывать уже "нормальные" строки (чтоб сразу она была как таблица2), то это не вариант.
Спасибо сказали: