不确定我是否尝试这个正确但我有一个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;
谢谢你,我希望这很清楚?谢谢,扎克
答案 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