【问题标题】:Search mysql database table for a "float" latitude number and display the results on page在 mysql 数据库表中搜索“浮点”纬度数并在页面上显示结果
【发布时间】:2017-01-17 13:59:19
【问题描述】:

我正在构建的是一个简单的表单来搜索 MySQL 数据库表,目前它可以很好地搜索文本名称,现在我需要搜索存储为浮点数的纬度数。表格标题是名称、纬度和 lng。当用户搜索匹配的纬度时,只有那些结果会显示在同一页面上。任何帮助都是极好的。

$sql = "SELECT name,lat,lng FROM table WHERE name LIKE '%".$term."%' 
       OR lat MATCH '%".$term."%' OR lng MATCH '%".$term."%'";

【问题讨论】:

  • $sql = "SELECT name,lat,lng FROM table WHERE name LIKE '%".$term."%' OR lat MATCH '%".$term." %' OR lng MATCH '%".$term."%'";
  • 这是我的 sql 查询,但只有“名称”有效?
  • MATCH 不是这样工作的。 See here.
  • 我尝试编辑文本 Magnus Eriksson 并且得到 - 警告:mysql_fetch_array() 使用的数据库系统是 mariaDB。将发布其他代码。
  • while ($row = mysql_fetch_array($r_query)){ echo 'ID: ' .$row['id']; echo '
    名称:' .$row['name']; echo '
    纬度:'.$row['lat']; echo '
    lng: '.$row['lng'];回声'

    '; }

标签: php mysql forms search latitude-longitude


【解决方案1】:
  • 将纬度和经度的DATATYPE 更改为数值。 Representation choices

  • 识别用户是在询问纬度/经度还是姓名。 OR 对性能的影响几乎与领先的通配符一样多。

  • 使用FULLTEXT 索引和MATCH(name) AGAINST('$term' in BOOLEAN MODE) 以按名称进行高效搜索。

  • 使用范围;用户不会输入准确的 lat/lng 值。还有四舍五入的问题。 lat BETWEEN $lat - 0.01 AND $lat + 0.01。 (这大约是南北一公里;根据需要进行调整。

在您实施了其中的大部分之后,回来寻求更多建议/滥用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2013-02-23
    • 2016-04-07
    • 2013-12-15
    • 2011-12-27
    • 2021-08-13
    相关资源
    最近更新 更多