2011-05-16 122 views
3

我正在使用空間擴展名與MySQL進行地理搜索。對於我沒有存儲過程(那工作非常好,當我在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的不能retur n結果 在給定的上下文中設置

所以..我該如何使用回頭來返回一組數據?

感謝

回答

0

您可以更改的最後一部分成

/*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選擇,找到結果集那裏。

+0

是的,但如果有多個用戶在搜索? 這個搜索實際上是一個功能,允許用戶搜索城市周圍的一些POI,所以它會被很多用戶調用...我不能使用這種方法...它不會工作 – Fazoulette 2011-05-17 00:15:31

+0

好吧..我用過驅動程序MYSQLI而不是MYSQL,它的工作原理。我可以檢索存儲過程返回的數據集。 但這是個好主意嗎? 謝謝 – Fazoulette 2011-05-17 00:33:44

+0

@Fazoulete,這是一個破解,但如果你使用臨時表,每個會話將擁有它自己的表,所以用戶不會看到其他每個結果。如果你直接從SP中得到結果集,那會更好。 – Johan 2011-05-17 13:04:26