Основной курс по Joomla
0 Пользователей и 1 Гость просматривают эту тему.
  • 6 Ответов
  • 383 Просмотров
*

brigadier

  • Осваиваюсь на форуме
  • ***
  • 74
  • 0
Joomla sql запрос
« : 07.08.2015, 22:35:28 »
всем привет.
может немного не туда темка, админы перекинут если что )

на страницах Joomla нужно сделать проверку IP адреса
если пользователь написал статью с одно го и того же IP выделить его.

вот немного код начал делать, но не работает пока.
есть массив с IP адресом пользователя когда он пишет первый пост.

Код
$query = mysql_query("SELECT pid,ipaddress,
                            CASE
                            when count(*) = 2 then 'ip repeated 2 times'
                            when count(*) = 3 then 'ip repeated 3 times'
                            when count(*) > 3 then 'ip repeated more than 3 times'
                            else 'your IP is unique'
                            end as message
                            FROM posts
                            GROUP BY pid,ipaddress", $conn);
$result = mysql_fetch_array($query);

$blog['User']['ipaddress']; // user IP
echo ? // что нужно вывести ?
*

zomby6888

  • Живу я здесь
  • ******
  • 1484
  • 167
Re: Joomla sql запрос
« Ответ #1 : 07.08.2015, 23:11:32 »
Во первых вы подсчитываете айпи адреса, значит нужно группировать по ipaddress вместо pid,ipaddress.
Во вторых у Joomla есть API, в том числе для работы с БД.
В третьих у Joomla нет таблицы posts, разве только в сторонних расширениях может быть
интернет-блог: http://websiteprog.ru
*

brigadier

  • Осваиваюсь на форуме
  • ***
  • 74
  • 0
Re: Joomla sql запрос
« Ответ #2 : 08.08.2015, 00:07:54 »
ну это для примера я написал.
pid - это название темы блога в которой нужно отфильтровать IP адреса.
*

Fedor Vlasenko

  • Профи
  • ********
  • 3800
  • 698
  • Все начинается с Value
Re: Joomla sql запрос
« Ответ #3 : 08.08.2015, 04:06:28 »
на страницах Joomla нужно сделать проверку IP адреса
если пользователь написал статью с одно го и того же IP выделить его.
Немного советов
Многие программисты создают поле VARCHAR(15) для хранения IP адреса, даже не задумываясь о том, что будут хранить в этом поле целочисленное значение. 
Если  использовать  INT, то размер поля сократится до 4 байт,  и оно будет иметь фиксированную длину.
Нужно использовать тип UNSIGNED INT, так как IP адрес задействует все  32 бита беззнакового целого.
В запросах можно использовать функцию INET_ATON() для конвертации IP адреса в целое, и INET_NTOA() для обратного процесса. Также есть схожие функции PHP: ip2long() и long2ip().
И не забудьте его сделать индексом. MySQL быстрее работает с числовыми индексами
*

brigadier

  • Осваиваюсь на форуме
  • ***
  • 74
  • 0
Re: Joomla sql запрос
« Ответ #4 : 08.08.2015, 11:42:54 »
Спасибо Фёдор за советы, с выборкой понятно вроде, как сравнить в php выборку и то что уже лежит в таблице $blog['User']['ipaddress']
*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
Re: Joomla sql запрос
« Ответ #5 : 09.08.2015, 12:17:43 »
Немного советов
Многие программисты создают поле VARCHAR(15) для хранения IP адреса, даже не задумываясь о том, что будут хранить в этом поле целочисленное значение. 
Если  использовать  INT, то размер поля сократится до 4 байт,  и оно будет иметь фиксированную длину.
Нужно использовать тип UNSIGNED INT, так как IP адрес задействует все  32 бита беззнакового целого.
В запросах можно использовать функцию INET_ATON() для конвертации IP адреса в целое, и INET_NTOA() для обратного процесса. Также есть схожие функции PHP: ip2long() и long2ip().
И не забудьте его сделать индексом. MySQL быстрее работает с числовыми индексами
А что делать с IPv6?

Цитировать
INET_ATON(expr)

Given the dotted-quad representation of an IPv4 network address as a string, returns an integer that represents the numeric value of the address in network byte order (big endian).
*

Fedor Vlasenko

  • Профи
  • ********
  • 3800
  • 698
  • Все начинается с Value
Re: Joomla sql запрос
« Ответ #6 : 09.08.2015, 15:19:15 »
А что делать с IPv6?
как вариант
Код: php-brief
$key = sprintf('%u', crc32($ipv6));
из строки целочисленный индекс
inet_ntop() и inet_pton()