如何通过php / ajax使用数组搜索MySQL数据库?

时间:2019-07-04 09:33:34

标签: php mysql ajax

我发现有很多类似的问题要问,但似乎都与我要解决的问题不相干。

问题:

我有一个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";

3 个答案:

答案 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."')");

让我们尝试