Como la pregunta es muy extensa y da para mucha literatura, te voy a contestar por lo menos dándote pistas para la primera parte: cómo almacenar la información y plantear su futura consulta. En primer lugar, vamos a aclarar lo que se considera tiempo real en tus comentarios anteriores.
El ejemplo más simple: una ubicación por cada usuario que no cambia en el tiempo. La ubicación se registra sólo una vez y es invariante, podría incluso guardarse en la tabla de usuarios. La ubicación se guarda en la BBDD y se consulta cada vez que se quieran ver usuarios cercanos.
Si en lugar de guardarlo sólo una vez, la actualizas cada vez que el usuario se conecta independientemente del dispositivo (HTML5) y le das una caducidad a la conexión (por ejemplo con un campo que indique cuando expira) ya tienes un sistema que es pseudo tiempo real. Cuanto más frecuentemente lo actualices y más rápido caduque más parecido será al tiempo real.
Podrías tener una tabla que guarde:
- ID del usuario
- Posición
- Caducidad de la posición
Con esos campos ya serías capaz de calcular qué usuarios se encuentran cerca de ti partiendo de tu posición y fecha y hora actual. Lógicamente, de cara a una optimización en esa tabla se deberían ir borrando elementos antiguos, pero esto ya queda fuera del alcance de la pregunta para no extenderme demasiado.
Ahora surgen dos preguntas:
- ¿Qué formato tiene el campo "Posición"?
- ¿Cómo filtro por distancia en la consulta a la BBDD?
La respuesta a ambas está relacionada y hay dos opciones:
- Almacenar la posición en dos campos independientes: longitud y latitud. El almacenamiento es más simple pero la consulta a la base de datos se complica ya que hay que utilizar conocimientos geométricos y trigonometría.
- Utilizar una extensión de MySQL que de solución al problema: Extensiones espaciales. Hay tipos de datos y funciones especiales para almacenar puntos en un espacio geométrico y calcular si distancia.
Te dejo un enlace muy completo que explica diferentes estrategias y soluciones matemáticas: http://www.michael-pratt.com/blog/7/Encontrar-Lugares-cercanos-con-MySQL-y-PHP/