MYSQL:从传递2列值的表中选择:st_distance_sphere的参数不正确
我发现了这个堆栈溢出问题 我想为我的用例实现它,但我得到了以下错误: 1210-#1210到st_距离球的参数不正确 我有一个包含以下列的数据库表:MYSQL:从传递2列值的表中选择:st_distance_sphere的参数不正确,mysql,sql,Mysql,Sql,我发现了这个堆栈溢出问题 我想为我的用例实现它,但我得到了以下错误: 1210-#1210到st_距离球的参数不正确 我有一个包含以下列的数据库表: 公司目标 公司名称 城市名称 纬度 经度 露营地点类型 照片网址 如何从tbl_cc表中的每一行中提取纬度和经度,并计算出距离以米为单位小于或等于300米的结果 SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude, CampingLocationT
- 公司目标
- 公司名称
- 城市名称
- 纬度
- 经度
- 露营地点类型
- 照片网址
tbl_cc
表中的每一行中提取纬度
和经度
,并计算出距离以米为单位小于或等于300米的结果
SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude,
CampingLocationType, PhotoUrl
FROM tbl_cc
WHERE st_distance_sphere(POINT(13.5145461,43.564368), POINT(Longitude, Latitude)) <= 300
在mysql admin中,它工作正常,但在php中,我收到了这个让我发疯的错误:
2019年12月16日星期一16:14:26格林尼治标准时间[错误][客户93.36.55.43]-
www.testcolan.it-AH01215:PHP警告:mysqli_query():(HY000/1210):
中的st_distance_sphere的参数不正确
/web/htdocs/www.testcolan.it/home/campit/rest_api/sql/DBOperations.php
第759行:
/web/htdocs/www.testcolan.it/home/campit/rest_api/getlistadovestate.php
2019年12月16日星期一16:14:26格林尼治标准时间[错误][客户93.36.55.43]-
www.testcolan.it-AH01215:PHP警告:mysqli_fetch_array()需要
参数1是mysqli_结果,布尔值在
/web/htdocs/www.testcolan.it/home/campit/rest_api/GeneralFunctions.php
第242行:
/web/htdocs/www.testcolan.it/home/campit/rest_api/getlistadovestate.php
我的脚本php是:
public function GetListaDoveSostare($lat, $lng, $kmmin, $ordinamentoData, $localita)
{
$metri = (intval($kmmin) * 1000);
$com = new DbConnect();
$sql = "";
$sql = "SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude,
CampingLocationType, PhotoUrl, st_distance_sphere(point(".floatval($lng).",".floatval($lat)."), point(CAST(Longitude AS DECIMAL(18,14)), CAST(Latitude AS DECIMAL(18,14))), $metri) as Metri
FROM tbl_camper_contact
WHERE st_distance_sphere(point(".floatval($lng).",".floatval($lat)."), point(CAST(Longitude AS DECIMAL(18,14)), CAST(Latitude AS DECIMAL(18,14))), $metri)";
mysqli_set_charset($com->getDb(), 'utf8');
$result = mysqli_query($com->getDb(), $sql);
return $result;
}
返回值放在生成json的函数中:
public function GetListaDoveSostare($resultDoveSostare, $lat, $lng)
{
$dbOperationsObject = new DBOperations();
$doveSostare= array();
while ($row = mysqli_fetch_array($resultDoveSostare)) {
$dove_sostare = array(
"CompanyObjectId" => $row['CompanyObjectId'],
"CompanyName" => $row['CompanyName'],
"CityName" => $row['CityName'],
"Latitude" => $row['Latitude'],
"Longitude" => $row['Longitude'],
"CampingLocationType" => ($row['CampingLocationType'] == "Camperplace") ? "Area Sosta" : "Campeggio",
"PhotoUrl" => $row['PhotoUrl'],
"MetriDaPosizioneCorrente" => $row['Metri']//$metri
);
$json= json_encode($dove_sostare);
$dove_sostare = json_decode($json);
array_push($doveSostare, $dove_sostare);
}
return $doveSostare;
}
非常感谢您的帮助克里斯蒂安查看您的第一个查询,您没有正确通过半径:
SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude,
CampingLocationType, PhotoUrl
FROM tbl_cc
WHERE st_distance_sphere(POINT(13.5145461,43.564368), POINT(Longitude, Latitude)) <= 300
您提到的错误是“如果半径参数存在但不是正的话”。
请参阅进一步参考您使用的是哪种数据库管理系统?哦,天哪,我忘了数据库管理系统。更新的问题请!好的,半径是300?以米为单位,被视为ehm,我在安科纳,但不工作,它必须通过坐标显示最近的城市…“不工作”没有任何意义。什么不起作用?你有什么错误?你的桌子上有离你提供的坐标300米的地方吗?对不起,我的回答很简短…不,我没有负300米。。。。如果我在安科纳(意大利)300米,没有显示整个300米的任何地方,但显示了德国的地方……那么您的查询应该如何返回任何东西?
public function GetListaDoveSostare($resultDoveSostare, $lat, $lng)
{
$dbOperationsObject = new DBOperations();
$doveSostare= array();
while ($row = mysqli_fetch_array($resultDoveSostare)) {
$dove_sostare = array(
"CompanyObjectId" => $row['CompanyObjectId'],
"CompanyName" => $row['CompanyName'],
"CityName" => $row['CityName'],
"Latitude" => $row['Latitude'],
"Longitude" => $row['Longitude'],
"CampingLocationType" => ($row['CampingLocationType'] == "Camperplace") ? "Area Sosta" : "Campeggio",
"PhotoUrl" => $row['PhotoUrl'],
"MetriDaPosizioneCorrente" => $row['Metri']//$metri
);
$json= json_encode($dove_sostare);
$dove_sostare = json_decode($json);
array_push($doveSostare, $dove_sostare);
}
return $doveSostare;
}
SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude,
CampingLocationType, PhotoUrl
FROM tbl_cc
WHERE st_distance_sphere(POINT(13.5145461,43.564368), POINT(Longitude, Latitude)) <= 300
SELECT CompanyObjectId, CompanyName, CityName, Latitude, Longitude,
CampingLocationType, PhotoUrl
FROM tbl_cc
WHERE st_distance_sphere(POINT(13.5145461,43.564368), POINT(Longitude, Latitude), 300)