Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di Scream
    Registrato dal
    Apr 2002
    Messaggi
    228

    [mysql] Problema con stored procedure

    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:
    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; //
    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:

    #1312 - PROCEDURE database.testlocalize can't return a result set in the given context

    Come ulteriore prova ho creato la seguente procedura:
    codice:
    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; //
    Anche in questo caso eseguendo
    codice:
    CALL testcoord( 1, 1000, @mylon , @lon1  ); SELECT @mylon , @lon1 ;
    Mi viene mostrata una tabella con valori Null
    Avete suggerimenti da darmi per risolvere il problema?
    Ultima modifica di Scream; 31-01-2015 a 16:59

  2. #2
    Utente di HTML.it L'avatar di Scream
    Registrato dal
    Apr 2002
    Messaggi
    228

    [RISOLTO] [mysql] Problema con stored procedure

    Risolto... tutto corretto semplicemente il test da phpmyadmin non funziona. Eseguito direttamente dentro mysql ottengo la tabella dei risultati.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.