Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как обычно делают в таком случае?
Форумы портала PHP.SU » » Работа с СУБД » Как обычно делают в таком случае?

Страниц (1): [1]
 

1. STRELOK - 09 Октября, 2011 - 14:30:42 - перейти к сообщению
Доброго времени суток!)

Очень интересует один вопрос, постараюсь сформулировать его понятно и надеюсь правильный раздел выбрал для создания темы)

В общем, существует таблица с лицензиями вида:
|ID|HWID|Lic_Key|Added|Updated|Seller|Comments|Banned|

вывожу и управляю примерно вот так:
http://floomby[dot]ru/content/Mga32V5Auk

Все работает хорошо, но кое чего не хватает) Далее уже не знаю как сделать...

Хочу сделать статистику обращений к лицензии, включая IP адреса. Для этого надемал сделать табличку.

|ID|Lic_ID|IP|Count|
Вот как обновлять\добавлять запись с наименьшими "затратами"?
Пока я вижу только:
1) Выбрать запись с нужными идентификатором лицензии и ip адрессом.
2) Если она есть, то увеличить запросом количество. Если нету - добавить.

По другому нельзя ли как-то сделать? С уникальным полем, и ON DUBLICATE KEY - думаю не выйдет. Так как могут быть записи с одинаковыми идентификаторами лицензии, так и с одинаковыми ip адрессами.

И еще вопрос.
Как выводя список лицензии, вывести в таблицу количество IP адрессов?

Пока я не вижу другого варианта, как выбирать все записи из таблицы статистики ip адрессов и получать количество. Но при этом, сколько лицензий, столько и запросов.

Скажем 300 лицензий, чтобы вывести таблицу нужно 301 запрос... "Убиться веником"...

Посоветуйте пожалуйста)
2. Мелкий - 09 Октября, 2011 - 15:01:06 - перейти к сообщению
STRELOK пишет:
С уникальным полем, и ON DUBLICATE KEY - думаю не выйдет. Так как могут быть записи с одинаковыми идентификаторами лицензии, так и с одинаковыми ip адрессами.

А count тогда по чему считается?

STRELOK пишет:
Как выводя список лицензии, вывести в таблицу количество IP адрессов?

0) подзапросом
1) приджойнить таблицу ip, сгруппировать по лицензии
2) повесить триггер на таблицу ip и инкрементить поле count в таблице лицензий
3. STRELOK - 09 Октября, 2011 - 15:05:42 - перейти к сообщению
Мелкий пишет:
А count тогда по чему считается?

ну к примеру:

ID | Lic_Id | IP | Count
1 | 1 | 127.0.0.1 | 2
1 | 1 | 127.0.0.2 | 3
1 | 2 | 127.0.0.1 | 4
1 | 2 | 127.0.0.2 | 5

т.е. в таблице могут быть записи с одинаковыми ID лицензии, в данном случае 1 и 2. Также одинаковые IP адресса, но относящиеся к разным лицензиям.

Мелкий пишет:
0) подзапросом
1) приджойнить таблицу ip, сгруппировать по лицензии
2) повесить триггер на таблицу ip и инкрементить поле count в таблице лицензий

Мне это к сожалению мало что говорит((
4. Мелкий - 09 Октября, 2011 - 15:27:33 - перейти к сообщению
STRELOK пишет:
т.е. в таблице могут быть записи с одинаковыми ID лицензии, в данном случае 1 и 2. Также одинаковые IP адресса, но относящиеся к разным лицензиям.

Дык делаете уникальный индекс на 2 поля и on dublicate справится.
Кстати, IP лучше хранить в int и преобразовывать через http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]nction_inet-aton да inet_ntoa

STRELOK пишет:
Мне это к сожалению мало что говорит((

Долго писать, неохота.
0) http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]/subqueries[dot]html
1) -
2) http://habrahabr[dot]ru/blogs/mysql/37693/ + http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]en/triggers[dot]html
5. STRELOK - 09 Октября, 2011 - 18:54:29 - перейти к сообщению
Спасибо!

 

Powered by ExBB FM 1.0 RC1