#php #mysql
#php #mysql
Вопрос:
Я понятия не имею, возможно ли это, но у меня есть поиск пользователей, и я хочу выводить результаты после каждой введенной буквы, поэтому я пытаюсь заставить этот поиск работать как можно быстрее, но моя амбициозная оценка слишком высока для моих знаний.
У меня есть users db
, relations (id, user_id, follower_id, status)
который я использую LEFT JOIN
дважды, сначала как подписчики, а затем как следующие.
Итак, что я хотел бы сделать, я хотел бы привести результат в порядок, например, сначала я хочу получить людей, на которых подписывается пользователь, и на которых подписываются в ответ, чем просто людей, на которых подписывается пользователь, чем людей, которые подписываются на пользователя и, наконец, других. И я хочу ограничить весь поиск максимум 10 строками. Возможно ли это как-то сделать только в mysql? я уже делал это на php, но это требует выполнения множества запросов к базе данных.
Также мне интересно, есть ли какой-либо способ установить, известно ли, из какого раздела эта строка.
Обновить
что мне нужно получить и в каком порядке:
пользователи при следующих условиях:
- по поисковому запросу и пользовательскому переходу, и они следуют обратно.
- с помощью поискового запроса и следования пользователя.
- по поисковому запросу и людям, которые следят за пользователем.
- по поисковому запросу
Порядок:
- пользователь следует, и они следуют обратно.
- пользователь следит.
- люди, которые следят за пользователем.
- Прочее.
Ограничение: 0, 10
Я считаю, что я не могу просто упорядочить результат таким конкретным способом, поэтому я думаю об использовании подзапроса или чего-то более сложного, но мои знания mysql слишком низки, и я не уверен, возможно ли это сделать в одном запросе, или я просто должен использовать отдельный запрос при каждом условии.
Комментарии:
1. ваш вопрос непонятен, попробуйте лучше объяснить, чего вы хотите в результате…
2. что мне нужно, так это строки из таблиц пользователей
Ответ №1:
Я не тестировал это, но я бы попробовал что-то подобное:
select distinct u.* from users u, relations r where u.id = r.user_id or u.id = r.follower_id order by u.id = r.user_id
Комментарии:
1. я уже делал это, но таким образом я не могу упорядочить строки i так, как я хочу. Сначала мне нужно получить людей, на которых подписан пользователь, и они следуют обратно, затем, если недостаточно строк, получить людей, на которых подписан пользователь, и если тогда недостаточно людей, которые подписаны на пользователя, и, наконец, если все еще не достигнут предел, найдите всех людей из этой таблицы, которые вписываются в поисковый запрос.