Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RFpro.ru: Базы данных MySQL


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4139
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 1762
∙ повысить рейтинг »
vladisslav
Статус: Практикант
Рейтинг: 1353
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Базы данных / MySQL

Номер выпуска:482
Дата выхода:17.11.2012, 15:00
Администратор рассылки:Абаянцев Юрий Леонидович aka Ayl (Профессионал)
Подписчиков / экспертов:105 / 44
Вопросов / ответов:1 / 1

Консультация # 186813: Здравствуйте! У меня возникли сложности с таким вопросом: Есть две таблицы. В одной хранятся названия групп компьютеров и их IP (все IP каждой группы лежат в текстовом поле, обрамлённые двойными кавычками и разделённые запятой). Во второй таблице ведётся учёт интернет-трафика, в каждой строке представлен IP и кол-во израсходованных интернет-...


Консультация # 186813:

Здравствуйте! У меня возникли сложности с таким вопросом:

Есть две таблицы. В одной хранятся названия групп компьютеров и их IP (все IP каждой группы лежат в текстовом поле, обрамлённые двойными кавычками и разделённые запятой). Во второй таблице ведётся учёт интернет-трафика, в каждой строке представлен IP и кол-во израсходованных интернет-байтов.
Вопрос: как написать встроенную функцию, которая берёт значение из поля IP группы и суммирует из второй таблицы байты только этой группы. Я пробовал так:

Код :
//В функцию передаётся идентификатор группы
CREATE FUNCTION SummaFromLog(ids INTEGER)
RETURNS NUMERIC(15,2)
COMMENT 'Возвращает сумму Мбайт для указанного списка IP'
BEGIN
  DECLARE mySum NUMERIC(15,2);
  DECLARE myComps VARCHAR(255);

  //Согласно идентификатору получаем список IP группы
  //В переменной myComps получается что-то вроде этого:
  //"192.168.0.1","192.168.0.2","192.168.0.3"
  SELECT comps INTO myComps FROM otdels WHERE id = ids;

  //Теперь делаем выборку суммы байтов 
  SELECT SUM(bytesin) INTO mySum FROM log WHERE client IN (myComps);

  RETURN mySum;
END

Однако в результате вместо суммы я всегда получаю NULL. Но если вторую выборку написать так:
SELECT SUM(bytesin) INTO mySum FROM log WHERE client IN ("192.168.0.1","192.168.0.2","192.168.0.3");
то возвращается правильная сумма.
Какие будут рекомендации?

Дата отправки: 14.11.2012, 14:19
Вопрос задал: Вадим Исаев ака sir Henry (Старший модератор)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Коцюрбенко Алексей aka Жерар (Советник):

Здравствуйте, sir Henry!

Попробуйте вместо двух SELECT использовать один примерно такого вида:

Код (SQL):
SELECT SUM(bytesin) INTO mySum FROM log LEFT JOIN otdels ON FIND_IN_SET(client, REPLACE(comps,'"','')) WHERE id=ids

Консультировал: Коцюрбенко Алексей aka Жерар (Советник)
Дата отправки: 14.11.2012, 16:45

5
Большое спасибо! Работает...
-----
Дата оценки: 15.11.2012, 10:04

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное