Это довольно странный вопрос, поэтому мой заголовок такой же странный.
Это приложение для голосования, поэтому у меня есть таблица с названием бюллетени, в которой есть два важных поля: имя пользователя и бюллетень. Полевой бюллетень представляет собой VARCHAR, но в основном он хранит список из 25 идентификаторов (числа от 1 до 200) в виде CSV. Например, это может быть:
22,12,1,3,4,5,6,7,...
И еще один может иметь
3,4,12,1,4,5,...
и т. Д.
Итак, учитывая идентификатор (скажем, 12), я хочу найти, какая строка (или имя пользователя) имеет этот идентификатор в первой позиции. Таким образом, в нашем примере выше это будет первый пользователь, потому что он имеет 12 во второй позиции, тогда как второй пользователь имеет его в третьей позиции. Вполне возможно, что несколько человек могут иметь 12 в лидирующей позиции (скажем, если у пользователей № 3 и № 4 это место в месте № 1), и возможно, что никто не мог занять 12 место.
Мне также нужно сделать обратное (у кого это в худшем месте), но я полагаю, что если я смогу решить одну проблему, остальное легко.
Я хотел бы сделать это, используя минимальное количество запросов и утверждений, но на всю жизнь я не понимаю, как.
Самое простое решение, о котором я подумал, - обойти всех пользователей в таблице и отследить, кто имеет идентификатор в лидирующей позиции. Сейчас это будет хорошо работать для меня, но количество пользователей может увеличиться в геометрической прогрессии.
Другая идея, которая у меня возникла, заключалась в следующем:
select `username` from `ballots` where `ballot` like '12,%'
и если это вернет результаты, я закончил, потому что позиция 1 является ведущей. Но если бы это дало 0 результатов, я бы сделал:
select `username` from `ballots` where `ballot` like '*,12,%'
где * - подстановочный знак, который будет соответствовать только одному и одному номеру (в отличие от%). Но я не знаю, можно ли это на самом деле сделать.
В любом случае, у кого-нибудь есть предложения, как лучше всего это сделать?
Спасибо