• User Attivo

    Group by problema

    Ciao a tutti,
    sono alle prese con una query che mi restituisce i negozi più vicini tramite il calcolo della latitudine e longitudine.

    [PHP]

    $latitude = "41.8239876";
    $longitude = "12.4342634";

    $query ="SELECT (6371 * acos(cos(radians(".$latitude."))
    * cos(radians(lat))
    * cos(radians(lng)
    - radians(".$longitude."))
    + sin(radians(".$latitude."))
    * sin(radians(lat))))
    AS distanza, id_negozio, negozio, indirizzo, citta
    FROM lista_negozi
    HAVING distanza < 50
    ORDER BY distanza ASC LIMIT 0 , 20";
    [/PHP]

    La query sembra funzionare discretamente, in quanto sono questi sono i risultati che ottengo.

    id - negozio - distanza
    2 - Negozio 1 - 6.68 Km
    11 - Negozio 2 - 7.07 Km
    2 - Negozio 1 - 8.36 Km
    11 - Negozio 2 - 19.03 Km
    2 - Negozio 1 - 19.18 Km

    [PHP]

    $query ="SELECT (6371 * acos(cos(radians(".$latitude."))
    * cos(radians(lat))
    * cos(radians(lng)
    - radians(".$longitude."))
    + sin(radians(".$latitude."))
    * sin(radians(lat))))
    AS distanza, id_negozio, negozio, indirizzo, citta
    FROM lista_negozi
    GROUP BY id_negozio
    HAVING distanza < 50
    ORDER BY distanza ASC LIMIT 0 , 20";
    [/PHP]

    Ma aggiungendo 'GROUP BY' invece di filtrare i dati in questo modo:
    2 - Negozio 1 - 6.68 Km
    11 - Negozio 2 - 7.07 Km

    Mi restituisce questi dati:

    id - negozio - distanza
    11 - Negozio 2 - 30.39 Km
    2 - Negozio 1 - 48.7 Km

    Che sono i negozi con la distanza più lontana.

    ringrazio tutti anticipatamente


  • User Attivo

    Ciao cla83 sei riuscito a risolvere il tuo problema?
    io userei la prima query e successivamente lavorerei sul codice php


  • User Attivo

    @PietroR said:

    Ciao cla83 sei riuscito a risolvere il tuo problema?
    io userei la prima query e successivamente lavorerei sul codice php

    Ciao PietroR,
    grazie per la risposta.

    Si ho risolto, ma diversamente, togliendo il GROUP BY, in quanto il sistema
    era più articolato di quello che ho mostrato.

    Ho risolto in pratica aggiungendo un campo CONTEGGIO nel database e nella query
    ho semplicemente aggiunto 'ORDER BY conteggio', in quanto ogni volta che viene
    compilato il form, quel 'NEGOZIO' avrà '+1' e quindi escluso nella seconda compilazione.

    Esempio:
    id - negozio - distanza conteggio
    2 - Negozio 1 - 6.68 Km 1 (1° utente compila il form)
    11 - Negozio 2 - 7.07 Km 1 (2° utente compila il form)
    2 - Negozio 1 - 8.36 Km 1 (3° utente compila il form)