【发布时间】:2011-02-13 04:07:33
【问题描述】:
我的数据库中有一个名为“points”和“category”的表。用户将在位置输入和关键字输入文本框中输入信息。
然后我想在我的表中找到关键字与点表中的“标题”字段或“类别”匹配但与用户位置相距一定距离的点。我想按距离对结果进行排序。
这是 btoh 独立工作的 2 个查询:
$mysql = "SELECT *, ( 3959 * acos( cos( radians('$search_lat') ) * cos( radians( lat ) ) * cos( radians( longi ) - radians('$search_lng') ) + sin( radians('$search_lat') ) * sin( radians( lat ) ) ) ) AS distance FROM points HAVING distance < '$radius'";
$mysql2 = "SELECT * FROM `points` LEFT JOIN category USING ( category_id ) WHERE (point_title LIKE '%$esc_catsearch%' OR category.title LIKE '%$esc_catsearch%')";
这是我尝试过的:
$sql_search = sprintf("SELECT *,point_id FROM points WHERE point_title LIKE '%%%s%%' UNION SELECT *, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( longi ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM points HAVING distance < '%s' ORDER BY distance LIMIT %d , %d",
$esc_catsearch,
mysql_real_escape_string($search_lat),
mysql_real_escape_string($search_lng),
mysql_real_escape_string($search_lat),
mysql_real_escape_string($radius),
$offset,
$rowsPerPage);
但它告诉我没有“距离”列。如果我删除“Order By”短语,那么它会起作用,但我仍然不确定这是否会给我想要的结果。我还尝试了另一种方式的查询,首先是距离搜索,但这似乎忽略了我的关键字。
任何想法将不胜感激!
【问题讨论】: