У меня есть запрос MySQL, что приводит к чему-то вроде этого:Выберите случайную строку для отдельного значения поля?
person | some_info
==================
bob | pphsmbf24
bob | rz72nixdy
bob | rbqqarywk
john | kif9adxxn
john | 77tp431p4
john | hx4t0e76j
john | 4yiomqv4i
alex | n25pz8z83
alex | orq9w7c24
alex | beuz1p133
etc...
(Это просто упрощенный пример В действительности существует около 5000 строк в моих результатах.).
Что мне нужно сделать, это пройти через каждого человека в списке (bob, john, alex и т. Д.) И вытащить строку из их набора результатов. Строка, которую я вытаскиваю, похожа на случайную, но вроде также на основе свободного набора условий. Здесь не важно указывать условия, поэтому я просто скажу, что это случайная строка для примера.
В любом случае, используя PHP, это решение довольно просто. Я делаю свой запрос и получаю 5000 строк назад и перебираю их, вытаскивая свою случайную строку для каждого человека. Легко.
Тем не менее, мне интересно, можно ли получить то, что я хотел бы только из MySQL-запроса, чтобы мне не пришлось использовать PHP для повторения результатов и вытаскивания моих случайных строк.
У меня возникло ощущение, что это может включать в себя подсчеты подзапросов, как и для каждого человека, и в этом случае это решение будет больше времени, ресурсов и пропускной способности, чем мое текущее решение.
Есть ли умный запрос, который может выполнить все это в одной команде?
Here is an SQLFiddle, с которым вы можете играть.
Трудно сказать, не зная условий.Наивный ответ: если вам не нужны данные в 'some_info', просто' SELECT DISTINCT person WHERE/* здесь вы здесь */' – bfavaretto
Мне нужно' some_info'. –