bigramx
Новичок
Поиск по нескольким таблицам
Доброго времени суток.
Прошу подсказать как лучше сделать поиск по нескольким таблицам? Суть примерно такова:
1) Есть основная таблица users с полями user_id, user_name, user_logined, user_last_action_time.
2) Есть несколько связанных таблиц. Например,
таблица biometrics: user_id, user_age, user_sex, user_hairs_color
и
таблица profile: user_id, user_single_state, user_country, user_city.
Необходимо сделать поиск по всем полям этих таблиц. в один результирующий запрос. Что есть сейчас:
Ну а проблема в том, что сейчас такое решение работает, но кол-во пользователей приближается к миллиону, а в будущем может быть и несколько миллионов. Да ещё и перед этим запросом идёт подсчёт кол-ва найденных пользователей.
И уже не понятно как со всем этим жить. Индексирование - тоже проблема, т.к. данные могут меняться постоянно, по желанию самих пользователей, хотя, конечно, вряд ли кто-то из пользователей будет каждые пять минут менять себе эти данные и индексировать их раз в 6 часов вполне возможно...
Может кто знает более красивое решение данной проблемы?
Заранее благодарю за помощь и советы!
Доброго времени суток.
Прошу подсказать как лучше сделать поиск по нескольким таблицам? Суть примерно такова:
1) Есть основная таблица users с полями user_id, user_name, user_logined, user_last_action_time.
2) Есть несколько связанных таблиц. Например,
таблица biometrics: user_id, user_age, user_sex, user_hairs_color
и
таблица profile: user_id, user_single_state, user_country, user_city.
Необходимо сделать поиск по всем полям этих таблиц. в один результирующий запрос. Что есть сейчас:
PHP:
SELECT * FROM `users`
LEFT JOIN `biometrics` ON (`biometrics`.`user_id` = `users`.`user_id`)
LEFT JOIN `profile` ON (`profile`.`user_id` = `users`.`user_id`)
WHERE `profile`.`user_single_state`='1' AND `profile`.`user_country`='Russia' AND `biometrics`.`user_hairs_color`='Блондин' AND `users`.`user_name` LIKE 'bigramx%' AND `users`.`user_logined`=1 AND `users`.`last_action_time`>".(time()-60*10)." ORDER BY `users`.`user_name` ASC
PHP:
SELECT COUNT(*) AS `users_num` FROM `users`
LEFT JOIN `biometrics` ON (`biometrics`.`user_id` = `users`.`user_id`)
LEFT JOIN `profile` ON (`profile`.`user_id` = `users`.`user_id`)
WHERE `profile`.`user_single_state`='1' AND `profile`.`user_country`='Russia' AND `biometrics`.`user_hairs_color`='Блондин' AND `users`.`user_name` LIKE 'bigramx%' AND `users`.`user_logined`=1 AND `users`.`last_action_time`>".(time()-60*10)."
Может кто знает более красивое решение данной проблемы?
Заранее благодарю за помощь и советы!