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'

両方のクエリを1つの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 に答える