0

生の SQL を使用してデータベースにクエリを実行しようとしています。特定のフィールドに似ているオブジェクトを取得したい。また、特定のフィールドについてこれらのオブジェクトの位置関係を照会したいと考えています。これは私がこれまで持っているSQLです:

Center.find_by_sql("SELECT * FROM Centers WHERE name ILIKE '%" + query + "%'
                    AND status = 1");

センターには位置関係があり、位置フィールドもクエリしたい。Location.country = 何か? 私が使用しているデータベースは PostgreSQL db であり、Datamapper を ORM として使用しています。datamapper を使用してこのクエリをセットアップしましたが、結果は良くありませんでした。Center.locationの国のフィールドにクエリを含めるようにこのクエリを拡張するのを手伝ってくれる人はいますか?

4

4 に答える 4

0

このクエリはそれを行う必要があります:

SELECT *
FROM Centersc c
JOIN Locations l ON l.id = c.location_id
WHERE c.name ILIKE ?
AND c.status = 1
AND l.country = ?

これは単に SQL の質問であるため、回答からすべてのアプリケーション コードを削除したことに注意してください。

于 2013-01-10T14:03:50.213 に答える
0

問題のデータベースの簡単なモデルを示していただけますか?

「センターには場所の関係があり、場所フィールドも照会したい。Location.country = something」から、結合しようとしている別のテーブルがあると思います。

クエリでは、返される列を定義する必要があります (列見出しの星印を交換し、テーブル名のプレフィックスを付けることもできます)。

ジョインの詳細については、こちらを参照してください。

http://www.w3schools.com/sql/sql_join.asp

于 2013-01-10T13:58:01.557 に答える
0

SQL が正しいレコードを結合する方法を認識できるように、各テーブルにフィールドが必要です。この例では .ID を使用しますが、これは、2 つのテーブルを結合できる任意のフィールド (ID、SSN、TIN、ACCT など) に変更する必要があります。

必要な実際の列の .* を交換する必要があります。 SELECT Centers.name, Centers.status, Location.country

SELECT Centers.*, Location.country
  FROM Centers
  INNER JOIN Location
  ON Centers.ID = Location.ID
  WHERE Centers.name LIKE '%query%'
  AND Centers.status = 1
  AND Location.country LIKE '%something%'
;
于 2013-01-10T13:59:49.667 に答える
0

そのためにはJOINテーブルツーテーブルlocationになりますcenters

SELECT c.*
FROM   centers  c
JOIN   location l ON l.location_id = c.location_id
WHERE  c.name ILIKE '%query%'
AND    c.status = 1
AND    l.country = 'something'

との間に 1:n の関係がlocationありcenters、外部キー列で実装されていると仮定しますlocation_id

準備済みステートメントを使用して、SQL インジェクションを回避します。

于 2013-01-10T13:59:50.127 に答える