Ciao a tutti, ho trovato su internet un modo per elencare i POI più vicini all'utente (partendo dalle sue coordinate). Sempre la stessa guida parlava di utilizzare le stored procedure per velocizzare le query nel caso ci fossero molti record all'interno del database (ed essendo molti POI effettivamente è così).
Questa quindi la funzione suggerita:
Le query prese singolarmente ed eseguite su phpmyadmin funzionano senza problemi (ovviamente provando valori "a caso"), mentre richiamandola completamente, sempre via phpmyadmin, ottengo il seguente errore:codice:CREATE PROCEDURE testlocalize (IN userid int, IN dist int) BEGIN DECLARE mylon DOUBLE; DECLARE mylat DOUBLE; DECLARE lon1 FLOAT; DECLARE lon2 FLOAT; DECLARE lat1 FLOAT; DECLARE lat2 FLOAT; -- get the original lon and lat for the userid SELECT ute_lon, ute_lat INTO mylon, mylat FROM utenti WHERE ute_id=userid LIMIT 1; -- calculate lon and lat for the rectangle: SET lon1 = mylon-dist/ABS(COS(RADIANS(mylat))*111); SET lon2 = mylon+dist/ABS(COS(RADIANS(mylat))*111); SET lat1 = mylat-(dist/111); SET lat2 = mylat+(dist/111); -- run the query: SELECT destination.*, 6371 * 2 * ASIN( SQRT( POWER(SIN((biz_lat - poi_lat) * PI()/180 / 2), 2) + COS(biz_lat * pi()/180) * COS(poi_lat * pi()/180) * POWER(SIN((biz_lon - poi_lon) * PI()/180 / 2), 2) ) ) AS distance FROM test_poi destination, utenti origin WHERE origin.ute_id=userid AND destination.poi_lon BETWEEN lon1 AND lon2 AND destination.poi_lat BETWEEN lat1 AND lat2 HAVING distance <= dist ORDER BY distance; END; //
#1312 - PROCEDURE database.testlocalize can't return a result set in the given context
Come ulteriore prova ho creato la seguente procedura:
Anche in questo caso eseguendocodice:CREATE PROCEDURE testcoord (IN userid int, IN dist int, OUT mylon DOUBLE, OUT lon1 FLOAT) BEGIN DECLARE mylon DOUBLE; DECLARE mylat DOUBLE; DECLARE lon1 FLOAT; DECLARE lon2 FLOAT; DECLARE lat1 FLOAT; DECLARE lat2 FLOAT; -- get the original lon and lat for the userid SELECT ute_lon, ute_lat INTO mylon, mylat FROM users WHERE ute_id=userid LIMIT 1; -- calculate lon and lat for the rectangle: SET lon1 = mylon-dist/ABS(COS(RADIANS(mylat))*111); SET lon2 = mylon+dist/ABS(COS(RADIANS(mylat))*111); SET lat1 = mylat-(dist/111); SET lat2 = mylat+(dist/111); END; //
Mi viene mostrata una tabella con valori Nullcodice:CALL testcoord( 1, 1000, @mylon , @lon1 ); SELECT @mylon , @lon1 ;
Avete suggerimenti da darmi per risolvere il problema?

Rispondi quotando
