Bonjour à tous,

Je vous expose mon soucis actuel.

J'ai une table utilisateurs avec divers champs dont 2 importants (longitude + latitude) ensuite j'ai une fonction php qui compare les coordonnées GPS de l'utilisateur par rapport au membres et je fais un tri sur mon résultat pour afficher les plus près d'abord.

De ce côté là pas de soucis, mais la ou je bloque c'est que je dois les afficher page par page je peux donc pas faire une requête pour tous (2'000 utilisateurs) je dois donc utiliser un LIMIT X,X mais du coup ça m'affiche les utilisateurs les plus proche pour chaque page.

En faite, je cherche à faire un champs fictif dans la base de donnée (je sais pas si c'est possible) c'est à dire créer un champs avec "distance qui me sépare des autres" et ainsi pouvoir afficher page par page.

Le soucis c'est que la distance est propre à chaque utilisateur, je ne sais pas comment faire ni comment font les autres sites (de rencontres par ex).

merci d'avance pour votre aide :-)

4 réponses


shinix
Auteur
Réponse acceptée

Alors je te remercie pour ton aide, grâce à toi j'ai trouvé la solution en cherchant le bon endroit
Pour ceux qui sont dans le même cas que moi voici la réponse :-)
http://www.scottblaine.com/sorting-records-by-distance-using-php-mysql/

t'as essayé un truc comme ca :

/* On assume un plan (donc géométrie euclidienne) */
/* On assume que l'utilisateur est a la position x=10, y=15 */
/* On assume que les champs X et Y de ta table correspondent aux positions des users */
SELECT ID,
    X,
    Y,
    SQRT( POWER((X-10),2) + POWER((Y-15), 2) ) AS distance
FROM users
ORDER BY distance
LIMIT 50, 100

Remplace X rt Y par tes lang, lat; mon calcul de distance euclidienne par ta formule, et ca devrait rouler

Bonsoir Shinix.
N'hésite pas à valider la réponse de façon à mettre ton post en résolu.
Bonne soirée

shinix
Auteur

Pas de soucis, je le fait de suite :-) Bonne soirée