0

我正在使用以下查询按位置在页面上显示一些列表:

SELECT *,
 ((ACOS(SIN($lat * PI() / 180) * SIN(gps_lat * PI() / 180) + COS($lat * PI() / 180) * COS(gps_lat * PI() / 180) * COS(($lon - gps_long) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance 
  FROM listings

我现在还想按其建筑类型过滤上述列表。一个单独的表记录了列表 id 和建筑物类型 id,如下所示:

SELECT * 
  FROM building_types_listings 
 WHERE listing_id = listings.id 
   AND building_type_id = '$building_type'

如何将两个查询合并到一个 SQL 语句中?

4

1 回答 1

1

尝试类似:

SELECT whatever fields you need,
       ((ACOS(SIN($lat * PI() / 180) * SIN(gps_lat * PI() / 180) + COS($lat * PI() / 180) * COS(gps_lat * PI() / 180) * COS(($lon - gps_long) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance
FROM listings
  JOIN building_types_listings
    ON listings.id = building_types_listings.listing_id
WHERE building_type_id = '$building_type'

但是,您肯定要重新考虑如何构建查询并将字符串插入其中。如果 $building_type 恰好是(减去双引号)“';DELETE FROM Listings;--” 会发生什么?我建议您依赖一些类似 sprintf 的工具(在 PHP 中,这通常意味着您需要准备好的语句)而不是已弃用的错误功能魔术引号。

于 2012-06-06T01:22:03.653 回答