Гео расстояние Поиск MYSQL - PullRequest
3 голосов
/ 17 мая 2011

Я делаю гео-поиск с помощью MySQL, используя пространственное расширение. Для того, чтобы я сделал хранимую процедуру (это работает очень хорошо, когда я три в командной строке в MySQL, как это

mysql> CALL test2 (GeomFromText ( 'POINT (-0,93961472 43,52843475) '), 0,6);

DROP PROCEDURE `test2`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `test2`(IN center2 point,IN dist int)
BEGIN
SET @center = center2;
SET @radius = dist;

SET @bbox = CONCAT('POLYGON((', 
 X(@center) - @radius, ' ', Y(@center) - @radius, ',', 
 X(@center) + @radius, ' ', Y(@center) - @radius, ',', 
 X(@center) + @radius, ' ', Y(@center) + @radius, ',', 
 X(@center) - @radius, ' ', Y(@center) + @radius, ',', 
 X(@center) - @radius, ' ', Y(@center) - @radius, '))' 
);

SELECT professionnels.*, AsText(coord) 
FROM professionnels 
WHERE Intersects( coord, GeomFromText(@bbox) ) 
AND SQRT(POW( ABS( X(coord) - X(@center)), 2) + POW( ABS(Y(coord) - Y(@center)), 2 )) < @radius limit 20;
end

Но проблема в том, что мне нужно позвонить с php. и когда я делаю это, возвращается ошибка, говорит, что

PROCEDURE test2 не может вернуть результат установить в данном контексте

Итак ... Как я могу использовать поворот, чтобы вернуть набор данных?

Спасибо

1 Ответ

0 голосов
/ 17 мая 2011

Вы можете изменить последнюю часть на

/*delete all rows from temp_table*/
DELETE FROM temp_table WHERE temp_table.somefield is not null;

INSERT INTO temp_table
  SELECT professionnels.*, AsText(coord) 
  FROM professionnels 
  WHERE Intersects( coord, GeomFromText(@bbox) ) 
  AND SQRT(POW( ABS( X(coord) - X(@center)), 2) 
      + POW( ABS(Y(coord) - Y(@center)), 2 )) < @radius limit 20;

Затем вы можете выбрать из temp_table и найти там набор результатов.

...