我发现有很多类似的问题要问,但似乎都与我要解决的问题不相干。
问题:
我有一个php代码,该代码搜索mysql数据库并根据用户位置(纬度/经度)返回数据。并将数据打印为JSON。 (这可以正常工作,应该也可以)。
代码如下:
$latitude2 = floatval($_GET['latitude']); //no default
$longitude2 = floatval($_GET['longitude']); //no default
$sql ="SELECT b.*
FROM businesses b
ORDER
BY -- great circle distance calculation
( 3959 * ACOS( COS( RADIANS('" . $latitude2. "') )
* COS( RADIANS( b.lat ) )
* COS( RADIANS( b.lon )
- RADIANS('" . $longitude2 . "')
)
+ SIN( RADIANS('" . $latitude2 . "') )
* SIN( RADIANS( b.lat ) )
)
) ASC LIMIT 4";
现在,我需要在上述查询中再添加一个搜索参数。此参数是一个由选中的复选框创建的数组,看起来像这样:
[{"title":"Toys"},{"title":"Restaurants"},{"title":"Hotel"},{"title":"Pets"},{"title":"Accounting"}]
因此,我像其他所有参数一样,通过AJAX将这个额外的参数发送到我的PHP页面,并像这样在我的php中获取数组:
$filters = $_GET['filters'];
但是我不知道如何将这个额外的参数添加到当前查询中,因此我的php根据该数组中的值返回数据。
我尝试了这种无效的方法:
$latitude2 = floatval($_GET['latitude']); //no default
$longitude2 = floatval($_GET['longitude']); //no default
$filters = $_GET['filters'];
$sql ="SELECT b.*
FROM businesses b
ORDER
BY -- great circle distance calculation
( 3959 * ACOS( COS( RADIANS('" . $latitude2. "') )
* COS( RADIANS( b.lat ) )
* COS( RADIANS( b.lon )
- RADIANS('" . $longitude2 . "')
)
+ SIN( RADIANS('" . $latitude2 . "') )
* SIN( RADIANS( b.lat ) )
)
) ASC WHERE categories='$filters' LIMIT 4";
此WHERE categories='$filters'
是错误的。
有人可以请教这个问题吗?
编辑:
我尝试了所有方法都无济于事。我什至这样尝试,但仍然没有从数据库中得到任何结果:
$sql ="SELECT b.*
FROM businesses b
ORDER
BY -- great circle distance calculation
( 3959 * ACOS( COS( RADIANS('" . $latitude2. "') )
* COS( RADIANS( b.lat ) )
* COS( RADIANS( b.lon )
- RADIANS('" . $longitude2 . "')
)
+ SIN( RADIANS('" . $latitude2 . "') )
* SIN( RADIANS( b.lat ) )
)
) ASC WHERE FIND_IN_SET(b.categories, 'Toys, Restaurants, Hotel') LIMIT 4";
答案 0 :(得分:2)
filters变量包含一个json字符串。您需要使用json_decode将其转换为Php数组。
之后,获取每个标题的值。接下来使用MySQL函数FIND_IN_SET。例如:
@Override
public void sessionDestroyed(HttpSessionEvent se) {
User user = (User) se.getSession().getAttribute("user");
if (user != null) {
// logging
}
}
答案 1 :(得分:1)
简单地运行这样的查询以查看会发生什么是很好的-可能您会收到一条错误消息,告诉您WHERE
子句应该在{strong>之前 1}}
答案 2 :(得分:0)
WHERE IN
是您所需要的
WHERE id IN ('".$array."')");
让我们尝试