mysql - 按从存储过程 MYSQL 中调用的函数返回的值排序

标签 mysql stored-procedures stored-functions

我想按 dist 排序:dist 是从名为 isNeighbour 的函数返回的 double 值,它会抛出错误,因为 dist 未定义:字段列表中的未知列“dist”

DELIMITER $$

DROP PROCEDURE IF EXISTS `connectarabs`.`maxEdges` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `maxEdges`(id int,lat double,lon double,rad double)
BEGIN


if lat is null then

set lat=(select a.latitude from account a where a.id=id);
end if;
if lon is null then
set lon=(select a.longitude from account a where a.id=id);
end if;
 SELECT friends.* FROM account friends left  join account_friendTest me on (friends.id=me.second_account)
  or (friends.id=me.first_account) where (me.first_account=id OR me.second_account=id) AND friends.id <> id AND
     (   ((select isNeighbour(lat,lon,friends.latitude,friends.longitude,rad) as dist )<rad)   ) order by dist;
END $$
DELIMITER ;

最佳答案

这是因为您不能为 WHERE 子句中使用的列设置别名并在 ORDER BY 子句中使用它。相反,您需要 SELECT 该列并使用 HAVING 子句对其进行过滤:

SELECT friends.*,
       isNeighbour(lat,lon,friends.latitude,friends.longitude,rad) AS dist
FROM account friends
     LEFT JOIN account_friendTest me
        ON (friends.id=me.second_account)
           OR (friends.id=me.first_account)
WHERE (me.first_account=id OR me.second_account=id) AND
      friends.id <> id
HAVING dist < rad
ORDER BY dist;

关于mysql - 按从存储过程 MYSQL 中调用的函数返回的值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12140287/

相关文章:

mysql - MySQL中的存储过程

postgresql - 用 2 列的多条记录构造一个字符串

php - 我的删除程序在 php 中不起作用

mysql - 与加入 codeigniter mysql 不同

mysql - mysql程序循环中的问题

sql-server - T-SQL。过程调用的文本

c# - 从 C# App 运行 mysqldump 不工作

python - 我如何从python中的函数参数获取和存储mysql中的值

mysql - 如何在没有存储函数的情况下更新 MySQL 的行?

sql - 使用函数进行查询比使用子选择进行相同查询花费的时间更长