我使用以下查询按位置在页面上显示一些列表:
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语句中?
答案 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中通常意味着你需要准备好的语句)而不是弃用的错误魔法引用。