IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Liste de coordonnées les plus proche


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Liste de coordonnées les plus proche
    Bonjour, voici mon souci :

    J'ai une table nommée arc_mp

    dans cette table ce trouve deux colonne (xpos,ypos)

    J'aimerais trouvez le moyen de généré une liste des 20 coordonnées les plus proche de celle donnée par l'utilisateur.

    Après recherche sur internet j'ai trouver ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT A.x, A.y, B.x, B.y,
    SQRT(POW(B.x-A.x,2)+POW( B.y-A.y,2)) AB
    FROM points A
    INNER JOIN points B AS A.x <> B.x AND A.y <> B.y
    WHERE A.x=$x AND A.y=$y
    ORDER BY AB ASC
    LIMIT 1
    Mais j'ai du mal a l'adapté.

    Si une ame charitable pouvais me donner un coup de main, ou ne serait qu'une explication simple pour me mettre sur la bonne voix.

    Merci beaucoup par avance.

  2. #2
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Dans quelles unités travailles-tu ?

    Un calcul simple serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT x, y, SQRT(POW(x-$x,2)+POW(y-$y,2)) distance
    FROM points
    ORDER BY distance ASC
    LIMIT 20

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Aucune unité, juste des coordonnée x et y, allant de 1 a 400.

    j'ai essayé le bout de code ci dessus ce qui donne cela

    arcmp.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    include('bdd.php');
     
    ?>
    <?php
    $localisation= mysql_query("SELECT xpos, ypos, SQRT(POW(xpos-$xpos,2)+POW(ypos-$ypos,2))
    FROM arc_mp
    LIMIT 20");
    	$donnees = mysql_query($localisation);
    ?>
     
    <head>...</head>
     
    <body>
    <p><form method="POST" action="arcmp.php">
      <div align="center"><strong>Vos Coordonn&eacute;es</strong><br/>
        <input type="text" name="xpos"><input type="text" name="ypos"><br/><br/>
        <input type="submit" value="Localis&eacute;">
      </div>
    </form>
     
    <div align="center"><?php 
    echo $donnees['xpos'].",".$donnees['ypos']."<br/>";
     ?>
    </div>
    mais cela ne donne aucun resultat

  4. #4
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?php include('bdd.php') ?> 
    <?php
    	$xpos = empty($_POST['xpos']) ? 0 : $_POST['xpos'];
    	$ypos = empty($_POST['ypos']) ? 0 : $_POST['ypos'];
    ?>
    <p>
    <form method="post" action="distance.php">
    	<strong>Vos Coordonnees</strong> 
        <input type="text" name="xpos" value="<?php echo $xpos ?>" placeholder="0">
        <input type="text" name="ypos" value="<?php echo $ypos ?>" placeholder="0">
        <input type="submit" value="Localiser">
    </form>
    </p>
    <?php
    	/* Les 20 points les plus proches */
    	$sql = "SELECT xpos, ypos, SQRT(POW(xpos - $xpos, 2) + POW(ypos - $ypos, 2)) distance FROM points ORDER BY distance ASC LIMIT 20";
    	$handle = mysql_query( $sql );
     
    	$donnees = array();
    	while ( $point = mysql_fetch_object($handle) )
    	{
    		$donnees[] = $point;
    	}
    ?>
     
    <p>
    Points : <br/>
    <?php foreach ( $donnees as $i => $k ) : ?>
    (<?php echo $k->xpos ?>, <?php echo $k->ypos ?>) 
    <?php endforeach ?>
    </p>

  5. #5
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    c'est un problème assez simple en soit vu les contraintes que tu poses mais tu ne mets pas la contrainte de distance dans un where pour limiter les résultats...

    en plus tu ne fais pas de boucle de lecture pour exploiter $donnees... qui est une ressource et pas un tableau...
    je te conseille de lire ça

    utilise exponentielle + logarithme et est donc environ 100x plus long que:

    petite astuce pour ce genre de trucs:
    est plus rapide que:
    car une racine carrée est 10x plus longue qu'une multiplication
    donc pour la partie recherche (dans le where) c'est mieux...
    tu utilises la formule normale dans la partie affichage du select pour la distance bien sur... mais ça ne sera exécuté que sur les lignes concernées
    pour gagner en efficacité tu devrais te créer des fonctions stockées qui te permettrait d'optimiser encore l'écriture de tes calculs de distance...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci ca fonctionne nikel ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Coordonnées les plus proches
    Par turguedu dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/02/2011, 15h11
  2. Trouver les coordonnées géographiques les plus proches
    Par smikar dans le forum Accès aux données
    Réponses: 2
    Dernier message: 22/10/2010, 16h17
  3. [Complexité] recherche des n points les plus proches d'un point dans une liste
    Par Benoit_T dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 20/06/2009, 15h55
  4. Trouver coordonnées x/y les plus proches
    Par tet2brick dans le forum Requêtes
    Réponses: 5
    Dernier message: 20/02/2009, 15h33
  5. [MySQL] Extraire les 50 valeurs les plus proches d'un entier
    Par denis.ws dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 19/01/2007, 08h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo