Как реализовать поиск?

podarok

Новичок
Как реализовать поиск?

Суть:
таблица users, хрянящая данные о пользователе, имеет поля: id | login | pass | geo_id | geo_title и несколько других.

таблица regions, хранящая индексы и названия стран, регионов, городов

id | parent_id | title

123 | 0 | Россия
124 | 0 | Украина
...
543 | 123 | Моск. обл.
...
678 | 543 | Москва

При редактировании юзером анкеты после выбора географической зоны в трех селектах (страна, регион, город) в поле geo_id пишется полученный id. Пример: '_123_543_678_' - Россия, Моск. обл., Москва

Требуется реализовать поиск юзеров по региону.
Делаю следующее: в форме поиска опять же из трех селектов выбирается ключ региона, к примеру, Россия, Моск. обл (_123_543_) и составляю строку запроса, которая выдает мне всех юзеров с подходящим регионом:

PHP:
$query = "SELECT * FROM users WHERE geo_id LIKE '%".$key."%'";
Вопрос: господа, я совсем безнадежен? :) Меня терзают смутные сомнения относительно правильности этого решения... Сочтете меня дебилом - не стесняйтесь в выражениях... а если нет, то, пожалуйста, помогите решить следующее:

1) Юзер должен видеть на своей странице следующую обнадеживающую строку: "Ваша страница находится на 9923 месте по региону Россия, Моск. обл, Москва". Как предопределять, в какой строке поиска по его региону он окажется?
2) К примеру, появляется сервис по платному поднятию юзера в поиске. Путем отправки смс. Насколько я понимаю, смс-провайдер получает в тексте id юзера и с этим id вызывает скрипт с моей стороны, который и поднимает юзера в поиске.
Как переопределять результаты поиска? Что проставлять юзеру?
 

baev

‹°°¬•
Команда форума
Как предопределять, в какой строке поиска по его региону он окажется?
Из того, что Вы тут описали — никак.
Нигде не упомянуто, что есть некий критерий сортировки.
 

vovanium

Новичок
О чувствуется очередной сайт знакомств делается :)
В таком случае всё довольно просто, у каждого юзера делаешь отдельное поле с временной меткой в ней будет храниться время регистрации либо время "поднятия". А потом делаешь запрос обычный запрос SELECT COUNT(*)... который считает у скольких юзеров эта самая временная метка больше чем у нужного юзера. Хотя лучше вместо временной метки сделать счетчик (т.к. временная метка обычно в секундах, а за одну секунду может произойти несколько событий), который увеличивается на единицу при каждой регистрации или поднятии и его значение записывается в таблицу юзеру, а потом соответственно у кого больше значения счетчика тот и выше :)

А что касается регионов то лучше сразу переделать, чтобы не было там никаких выборок по текстовым полям и тем более с помощью LIKE...
 

vovanium

Новичок
podarok
Лучше сделать три поля в корорых будет отдельно храниться номер страны, области, города. Тогда поиск упростится, ведь для того чтобы, например, найти юзеров Москвы, тебе совсем не обязательно искать по полю страна и область, достаточно пройтись по номеру города...
 
Сверху