Форум русской поддержки Joomla!® CMS
09.12.2016, 09:52:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Joomla sql запрос

 (Прочитано 303 раз)
0 Пользователей и 1 Гость смотрят эту тему.
brigadier
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 76



« : 07.08.2015, 21: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
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #1 : 07.08.2015, 22:11:32 »

Во первых вы подсчитываете айпи адреса, значит нужно группировать по ipaddress вместо pid,ipaddress.
Во вторых у Joomla есть API, в том числе для работы с БД.
В третьих у Joomla нет таблицы posts, разве только в сторонних расширениях может быть
Записан
brigadier
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 76



« Ответ #2 : 07.08.2015, 23:07:54 »

ну это для примера я написал.
pid - это название темы блога в которой нужно отфильтровать IP адреса.
Записан
Fedor Vlasenko
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #3 : 08.08.2015, 03:06:28 »

на страницах Joomla нужно сделать проверку IP адреса
если пользователь написал статью с одно го и того же IP выделить его.
Немного советов
Многие программисты создают поле VARCHAR(15) для хранения IP адреса, даже не задумываясь о том, что будут хранить в этом поле целочисленное значение. 
Если  использовать  INT, то размер поля сократится до 4 байт,  и оно будет иметь фиксированную длину.
Нужно использовать тип UNSIGNED INT, так как IP адрес задействует все  32 бита беззнакового целого.
В запросах можно использовать функцию INET_ATON() для конвертации IP адреса в целое, и INET_NTOA() для обратного процесса. Также есть схожие функции PHP: ip2long() и long2ip().
И не забудьте его сделать индексом. MySQL быстрее работает с числовыми индексами
Записан
brigadier
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 76



« Ответ #4 : 08.08.2015, 10:42:54 »

Спасибо Фёдор за советы, с выборкой понятно вроде, как сравнить в php выборку и то что уже лежит в таблице $blog['User']['ipaddress']
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #5 : 09.08.2015, 11: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
Профи
********

Репутация: +696/-5
Offline Offline

Пол: Мужской
Сообщений: 3820


Все начинается с Value


« Ответ #6 : 09.08.2015, 14:19:15 »

А что делать с IPv6?
как вариант
Код
$key = sprintf('%u', crc32($ipv6));
из строки целочисленный индекс
inet_ntop() и inet_pton()
« Последнее редактирование: 09.08.2015, 14:27:01 от Fedor Vlasenko » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet