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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

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

Сообщение Sheer »

FomenkoAndrey писал(а):не будет ли проблем
Нет.
FomenkoAndrey писал(а):сейчас сравнение для этого поля установлено utf8_bin
Так в состоянии поставки, стандарт.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 9 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

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

Сообщение Alecto »

понял. спасибо.
через 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)) . ' ' : ''; 
блок кода, выше в этом посте - почему-то работает самостоятельно, вне зависимости от того, что и где еще установлено в поисковой форме.


Это поправимо?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

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

Сообщение Sheer »

Ну не знаю, у меня все работает
search.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 9 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

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

Сообщение Alecto »

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


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-запрос, формируемый перед этим блоком.
Возможно такое?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

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

Сообщение Sheer »

Выложи файл.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 9 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

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

Сообщение Alecto »

сделано.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

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

Сообщение Sheer »

Удалил все, что относится к CPFS mod и все работает. То бишь видим конфликт с этим модом. Разбираться не желаю.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 9 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

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

Сообщение Alecto »

понятно. спасибо.
плохо конечно, потому что этот мод очень нужен.
в-общем, оставляю этот код:

Код: Выделить всё

			$sql_where .= ($from) ? ' AND u.user_from ' . $db->sql_like_expression(str_replace('*', $db->any_char, $from)) . ' ' : ''; 
он хоть и не исчет по нескольким значениям в одном поле, зато корректно работает в связке с поиском по дополнительным полям и, благодаря советам Sheer теперь регистронезависимый.
Аватара пользователя
Evangelion
phpBB 2.0.5
Сообщения: 479
Стаж: 14 лет 9 месяцев
Благодарил (а): 84 раза
Поблагодарили: 122 раза

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

Сообщение Evangelion »

Здравствуйте, подскажите пожалуйста как сделать поиск не по "Откуда" а по новому дополнительному полю "Игровой ник".
Скрин доп.поля: http://www.floomby.ru/s2/bUWMPp
Скрин попытки изменения: http://www.floomby.ru/s2/cUWM9N
Но ничего не получилось(
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

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

Сообщение Sheer »

Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

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