У нас есть веб-проект, есть вопросы с несколькими вариантами ответов, и зарегистрированные пользователи отвечают на них ...
Я хочу найти общие ответы двух пользователей, чтобы дать сравнение. Я имею в виду, что вошедший в систему пользователь перейдет на страницу профиля другого пользователя и увидит сравнение его ответов только для общих вопросов ...
Таблицы похожи (упрощенно):
вопросы
ID
вопрос
active -> enum ('Y', 'N')
ответы
ID
question_id
ответить
Пользователи
ID
ник
user_answers
user_id
question_id
answer_id
private -> enum ('Y', 'N')
Я могу присоединиться к таблице user_answers с самим собой, указав псевдоним, но я должен присоединиться и к другим таблицам. Частные ответы не должны приниматься во внимание, должны приниматься только активные вопросы ...
Ожидается, что сайт получит некоторую нагрузку, поэтому я боюсь, что слишком много соединений и условий. Из своего опыта я знаю, что эти сложные запросы могут блокировать таблицы и вызывать серьезные проблемы с производительностью, особенно при большой нагрузке ...
Так что было бы лучше, если учесть масштабируемость и производительность ...
Был бы чем-л. как сфинкс или солнечная помощь, или какое-либо программное решение для сравнения?
Кстати, результаты будут разбиты на страницы ...
Сейчас я думаю о том, чтобы отделить детали вопроса и детали ответа и кэшировать их, поэтому запрос будет smt. как:
select ua1.answer_id as her_answer_id,
ua2.answer_id as my_answer_id,
ua1.question_id
from user_answers ua1
inner join users_answers ua2 on ua1.question_id=ua2.question_id
where ua1.user_id=$herId
and ua2.user_id=$myId
and ua1.private='N'
order by ua1.question_id desc
questions.question и answers.answer будут взяты из кэша ... В этом случае пассивные вопросы будут проблемой, но я думаю, что я попытаюсь переместить пассивные вопросы в какую-нибудь резервную базу данных, которая усложнит ситуацию ...