Tengo una consulta MySQL que resulta en algo como esto:¿Seleccionar una fila aleatoria por valor de campo distinto?
person | some_info
==================
bob | pphsmbf24
bob | rz72nixdy
bob | rbqqarywk
john | kif9adxxn
john | 77tp431p4
john | hx4t0e76j
john | 4yiomqv4i
alex | n25pz8z83
alex | orq9w7c24
alex | beuz1p133
etc...
(Esto es sólo un ejemplo simplificado En realidad hay alrededor de 5.000 filas en mis resultados.).
Lo que tengo que hacer es ir a través de cada persona en la lista (bob, john, alex, etc.) y sacar una fila de su conjunto de resultados. La fila que saco es algo aleatoria, pero también se basa en un conjunto de condiciones imprecisas. No es realmente importante especificar las condiciones aquí, así que solo diré que es una fila aleatoria para el ejemplo.
De todos modos, usando PHP, esta solución es bastante simple. Realizo mi consulta y recupero 5000 filas e itero a través de ellas extrayendo mi fila aleatoria para cada persona. Fácil.
Sin embargo, me pregunto si es posible obtener lo que obtendría de solo una consulta MySQL para no tener que usar PHP para recorrer los resultados y sacar mis filas aleatorias.
Tengo la sensación de que podría involucrar un BUNCH de subselects, como uno para cada persona, en cuyo caso esa solución requeriría más tiempo, recursos y ancho de banda que mi solución actual.
¿Existe alguna consulta inteligente que pueda realizar este comando todo en uno?
Here is an SQLFiddle con el que puedes jugar.
Difícil de decir, sin conocer las condiciones.Respuesta ingenua: si no necesita los datos en 'some_info', simplemente' SELECCIONE la persona DISTINCT DONDE/* usted condiciona aquí */' – bfavaretto
Necesito el' some_info'. –