Пропустить

Поиск пользователей по городу

У вас есть идея для расширения функциональности phpBB 3.0.x? Расскажите о ней здесь!
Свернуть Развернуть Правила форума Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

Re: Поиск пользователей по городу

Сообщение Sheer » 13.12.2011 16:55

FomenkoAndrey писал(а):не будет ли проблем

Нет.
FomenkoAndrey писал(а):сейчас сравнение для этого поля установлено utf8_bin

Так в состоянии поставки, стандарт.
Изображение
Аватара пользователя
Sheer
Поддержка
Поддержка
 
Сообщения: 1552
Зарегистрирован: 18.11.2009 1:40
Откуда: Рига, Латвия (нелепая страна)
Благодарил (а): 9 раз.
Поблагодарили: 291 раз.

Re: Поиск пользователей по городу

Сообщение FomenkoAndrey » 13.12.2011 17:06

понял. спасибо.
через PMA сменил сравнение для поля с ut8_bin на utf8_general_ci, финальный вариант кода получился вот такой:

			if ($from)
		            { //если поле "Откуда" заполнено
		                $pieces = explode(' ', $from);
                		$sql_where = 'AND (u.user_from ';
		                $sql_where .= $db->sql_like_expression(str_replace('*', $db->any_char, $pieces[0]));
		                for ($i = 0; $i < sizeof($pieces); $i++)
                		{
		                    $sql_where .= ' OR u.user_from ';
                		    $sql_where .= $db->sql_like_expression(str_replace('*', $db->any_char, $pieces[$i]));
		                }
                		$sql_where .= ' )';
		        } 


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


Добавлено спустя 47 минут 1 секунду:
Нашел вот еще какую неприятную особенность поиска по полу LOCATION.
Штатный поиск, в том числе и с дополнительными полями, работает по принципу фильтрации, т.е. каждое новое условие учитывается со всеми предыдущими.
Например, если я указываю искать всех пользователей с именами на букву А*, добавлю группу Новые пользователи, сужаю поиск по другим основным или доп.полям - результаты поиска "сужаются" согласно заданным критериям.

Но, если я ввожу в поле LOCATION любой параметр, то всё, что введено в других полях - игнорируется и поиск выполняется ТОЛЬКО по этому одному полю.

Вот такая строка, например, работает корректно вместе с другими параметрами поиска
			$sql_where .= ($from) ? ' AND u.user_from ' . $db->sql_like_expression(str_replace('*', $db->any_char, $from)) . ' ' : ''; 

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


Это поправимо?

FomenkoAndrey
phpBB 2.0.19
 
Сообщения: 619
Зарегистрирован: 25.12.2009 1:27
Благодарил (а): 47 раз.
Поблагодарили: 26 раз.

Re: Поиск пользователей по городу

Сообщение Sheer » 13.12.2011 20:59

Ну не знаю, у меня все работает
search.jpg
Изображение
Аватара пользователя
Sheer
Поддержка
Поддержка
 
Сообщения: 1552
Зарегистрирован: 18.11.2009 1:40
Откуда: Рига, Латвия (нелепая страна)
Благодарил (а): 9 раз.
Поблагодарили: 291 раз.

Re: Поиск пользователей по городу

Сообщение FomenkoAndrey » 13.12.2011 21:15

охотно верю.
демонстрирую свои манипуляции на примере:


1. Ищу пользователей по маске: Имя пользователя Ди* из группы Новые пользователи
Изображение
как видно, их всего три.


2. К условию, созданному на шаге 1 добавляю поиск по городам:
Вариант с кодом:
			if ($from)
		            { //если поле "Откуда" заполнено
		                $pieces = explode(' ', $from);
                		$sql_where = 'AND (u.user_from ';
		                $sql_where .= $db->sql_like_expression(str_replace('*', $db->any_char, $pieces[0]));
		                for ($i = 0; $i < sizeof($pieces); $i++)
                		{
		                    $sql_where .= ' OR u.user_from ';
                		    $sql_where .= $db->sql_like_expression(str_replace('*', $db->any_char, $pieces[$i]));
		                }
                		$sql_where .= ' )';
		        } 


Изображение
вместо 0 получаю аж 150 пользователей!
причем, их имена не соответствуют поисковому запросу.



3. Поиск с условиями, что и на шаге №2, только изменяю предыдущее условие на другой код:
			$sql_where .= ($from) ? ' AND u.user_from ' . $db->sql_like_expression(str_replace('*', $db->any_char, $from)) . ' ' : ''; 

Изображение
результат = 0 пользователей.

Что скажете?
Есть идеи?



Добавлено спустя 32 минуты 29 секунд:
Sheer
вот что я заметил...

В поиск варианта №2 не включаются те поля, которые расположены ДО кода с поля ГОРОД (в моем случае это поля ИМЯ ПОЛЬЗОВАТЕЛЯ и МЭЙЛ).
Но, поля, код которых объявляется ПОСЛЕ блока ГОРОД в поиске участвуют.
Дополнительные поля, почему-то в поиске не участвуют.

Мне кажется, что вариант кода №2 перезаписывает? sql-запрос, формируемый перед этим блоком.
Возможно такое?

FomenkoAndrey
phpBB 2.0.19
 
Сообщения: 619
Зарегистрирован: 25.12.2009 1:27
Благодарил (а): 47 раз.
Поблагодарили: 26 раз.

Re: Поиск пользователей по городу

Сообщение Sheer » 13.12.2011 22:57

Выложи файл.
Изображение
Аватара пользователя
Sheer
Поддержка
Поддержка
 
Сообщения: 1552
Зарегистрирован: 18.11.2009 1:40
Откуда: Рига, Латвия (нелепая страна)
Благодарил (а): 9 раз.
Поблагодарили: 291 раз.

Re: Поиск пользователей по городу

Сообщение FomenkoAndrey » 13.12.2011 23:21

сделано.
Вложения
memberlist.zip
(16.26 КБ) Скачиваний: 8

FomenkoAndrey
phpBB 2.0.19
 
Сообщения: 619
Зарегистрирован: 25.12.2009 1:27
Благодарил (а): 47 раз.
Поблагодарили: 26 раз.

Re: Поиск пользователей по городу

Сообщение Sheer » 14.12.2011 17:24

Удалил все, что относится к CPFS mod и все работает. То бишь видим конфликт с этим модом. Разбираться не желаю.
Изображение
Аватара пользователя
Sheer
Поддержка
Поддержка
 
Сообщения: 1552
Зарегистрирован: 18.11.2009 1:40
Откуда: Рига, Латвия (нелепая страна)
Благодарил (а): 9 раз.
Поблагодарили: 291 раз.

Re: Поиск пользователей по городу

Сообщение FomenkoAndrey » 14.12.2011 17:40

понятно. спасибо.
плохо конечно, потому что этот мод очень нужен.
в-общем, оставляю этот код:
			$sql_where .= ($from) ? ' AND u.user_from ' . $db->sql_like_expression(str_replace('*', $db->any_char, $from)) . ' ' : ''; 

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

FomenkoAndrey
phpBB 2.0.19
 
Сообщения: 619
Зарегистрирован: 25.12.2009 1:27
Благодарил (а): 47 раз.
Поблагодарили: 26 раз.

Пред.

Вернуться в Запросы модов для phpBB 3.0.x

 

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы