【发布时间】:2015-08-29 14:59:06
【问题描述】:
我的表中存储了两个字段 lat 和 long,这些列的数据类型为 VARCHAR
现在在 Laravel 我有以下变量:
$ne_lat = 21.405122657695813;
$ne_lng = -102.32061363281252;
$sw_lat = 19.984311565790197;
$sw_lng = -104.19652916015627;
我想在查询中使用它与我的表数据进行比较,如下所示:
$agencies = DB::table('users')
->whereRaw('lat < ? AND lat > ? AND long < ? AND long > ?',[$ne_lat,$sw_lat,$ne_lng,$sw_lng])
我试过这样投射:
$agencies = DB::table('users')
->whereRaw('CAST(lat AS FLOAT) < ? AND CAST(lat AS FLOAT) > ? AND CAST(long AS FLOAT) < ? AND CAST(long AS FLOAT) > ?',[$ne_lat,$sw_lat,$ne_lng,$sw_lng])
但它没有显示任何结果(我没有收到任何错误消息,因为查询显示在 json 中)它只是没有显示。我的查询有什么问题?
提前致谢
【问题讨论】:
-
你为什么首先将这些列定义为 varchar?
-
@mark baker - 这实际上是一个好问题......最初我将纬度和经度保存为 20.3534535643,-113.23534535(注意逗号)但现在出于测试目的,我将列拆分为两个不同的列..现在刚刚测试了将它们直接转换为浮动,我原来的问题仍然没有解决:(无论如何谢谢你的时间,让我思考
-
您是否尝试过回显实际查询并直接在数据库上运行它?通过在查询后执行此操作:
$query = DB::getQueryLog(); echo end($query); -
@b.enoit.be 很棒的建议,马上试试
-
@b.enoit.be 显然输出不是我期望的样子:string(113) "select * from
userswhereactive= ? and lat ? AND lng ?"