Решено: Логика в MySQL 5 (необходимо создать запрос с заменой похожих строк)

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

roleg
Сообщения: 38
ОС: ALT Linux 4

Решено: Логика в MySQL 5

Сообщение roleg »

Недавно была необходимость сгенерировать sql файл с запросами INSERT для добавления записей в таблицу.

Код: Выделить всё

#!/bin/bash
netcat $1 23 < cmd | grep Dynamic | awk '{print $2,$3}' > file
datex=`date --rfc-3339=date`
timex=`date +%H-%M`
while read ip mac;do
groupip=`echo $1 | sed -e 's/192\.168\.\(\)/\1/i'`
    cat >> filesql <<EOF
    INSERT INTO \`switch_user\` (
    \`id\` , \`groupip\` , \`ip\` ,  \`mac\` ,  \`date\` ,  \`time\`
    )VALUES(
    NULL, '$groupip', '$ip', '$mac', '$datex', '$timex'
    );
EOF
done < file


но теперь появилась необходимость перед добавлением в таблицу проверить существование строки с одинаковым ip и заменить.. а несуществующую строку с новым ip добавить :blush: и все это требуется организовать по средствам bash и sql запросам. Была идея сделать через REPLACE, но так и не догнал как сделать :mellow:
я думаю что можно сделать задумку немного переделав данный sql запрос.

P.S. поле id - auto_increment
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: Решено: Логика в MySQL 5

Сообщение Voice »

1) Сделать поле ip уникальным ключом.
2) Использовать вариант INSERT с ON DUPLICATE KEY UPDATE. (http://dev.mysql.com/doc/refman/5.0/en/insert.html)
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
roleg
Сообщения: 38
ОС: ALT Linux 4

Re: Решено: Логика в MySQL 5

Сообщение roleg »

Voice писал(а):
02.10.2008 17:20
1) Сделать поле ip уникальным ключом.
2) Использовать вариант INSERT с ON DUPLICATE KEY UPDATE. (http://dev.mysql.com/doc/refman/5.0/en/insert.html)

сделал уникальным.. а как запрос сформировать.. слишком много непонятного..
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: Решено: Логика в MySQL 5

Сообщение Voice »

Где-то так.

INSERT INTO switch_user
(id, groupip, ip, mac, date, time)
VALUES (NULL, '$groupip', '$ip', '$mac', '$datex', '$timex')
ON DUPLICATE KEY UPDATE
groupip = '$groupip', mac = '$mac', date = '$datex', time = '$timex';
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
brejnev
Сообщения: 105
ОС: OpenSUSE 11.1

Re: Решено: Логика в MySQL 5

Сообщение brejnev »

Гыгы, я нечто подобное делал в икселе( т.е. в oocalc :)
Надо было кучу инсертов слепить и дубли обработать.... пару-тройку формул, шаблончик - заняло минут 5
Спасибо сказали:
roleg
Сообщения: 38
ОС: ALT Linux 4

Re: Решено: Логика в MySQL 5

Сообщение roleg »

Voice
Круть... я уже по другому хотел делать.. вроде пашет :) спасибо
Спасибо сказали:
roleg
Сообщения: 38
ОС: ALT Linux 4

Re: Решено: Логика в MySQL 5

Сообщение roleg »

ТЕМА ЗАКРЫТА
Спасибо сказали: