使用需要放入数组的字段搜索查询

时间:2017-02-28 20:15:22

标签: php mysql

不确定我是否尝试这个正确但我有一个MySQL数据库存储纬度,经度和车辆以及其他字段。我遇到的问题是我将车辆存放在数据库中,如'1:4:7:8:9'等.1是汽车,但这并不重要。我的代码工作得到了基于long,lat的结果,但如果车辆类型也匹配,我需要它来获得结果,所以我需要在查询中添加一些内容以查看该字段中是否有1或其他联系'1:4:7:8:9'

代码是

    include 'db.php';

$origlat = "53.83428999999999";
$origlon = "-3.0399797000000035";
$vehicle_req = "1";

$result = mysqli_query($con,"SELECT *, ( 3959 * acos( cos( radians(53.83428999999999) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-3.0399797000000035) ) + sin( radians(53.83428999999999) ) * sin( radians( latitude ) ) ) ) AS distance FROM clients HAVING distance < 30 ORDER BY distance LIMIT 0 , 20;");

while($row = mysqli_fetch_array($result)) {

$id = $row['id'];

echo "found";
echo $id;

谢谢你,我希望这很清楚?谢谢,扎克

1 个答案:

答案 0 :(得分:0)

如果您想在id列中搜索1和4:

/* MySQL Query Should be:
SELECT *, (...) AS distance FROM clients
HAVING distance < 30 
  AND INSTR( concat('-:',id,':') , ':1:') > 0
  AND INSTR( concat('-:',id,':') , ':4:') > 0
ORDER BY distance LIMIT 0 , 20;
*/

要创建此MySQL查询,我们需要for

中的每个数字$vehicle_reqs循环
$vehicle_reqs= array(1,4);
// fix part of MySQL Query
$sqlQuery = "SELECT *, ( 3959 * acos( cos( radians(53.83428999999999) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-3.0399797000000035) ) + sin( radians(53.83428999999999) ) * sin( radians( latitude ) ) ) ) AS distance FROM clients HAVING distance < 30 "

// conditions for all items in $vehicle_reqs array:
for( $i=0; $i<sizeof($vehicle_reqs); $i++){
    $sqlQuery = $sqlQuery . " AND INSTR( concat('-:',id,':') , ':".$vehicle_reqs[i].":') > 0 " ;
}

// another fix part of MySQL Query
$sqlQuery = $sqlQuery ." ORDER BY distance LIMIT 0 , 20;" ;
echo $sqlQuery ;

INSTR( concat('-:',id,':') , ':4:') > 0如何运作?

1-将:添加到内存中id列的开头和结尾。

2-找到第一个等于':4:'

的子串

3-如果INSTR()找不到任何东西,则返回0