两个表分为1个SQL查询

时间:2012-06-06 01:01:10

标签: php mysql

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

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语句中?

1 个答案:

答案 0 :(得分: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 listing; - ”会发生什么?我建议你依赖一些类似sprintf的工具(在PHP中通常意味着你需要准备好的语句)而不是弃用的错误魔法引用。