2013-01-10 2 views
0

원시 SQL을 사용하여 데이터베이스를 쿼리하려고합니다. 나는 어떤 분야에서 같은 것을 가진 물건을 얻고 싶다. 또한 특정 필드에 대해 이러한 객체 위치 관계를 쿼리하려고합니다. 이것은 내가 지금까지 가지고있는 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의 국가 입력란에 검색어를 포함하도록이 검색어를 확장 할 수 있습니까?

답변

0

당신은 각 테이블의 필드가 필요합니다. 이 예제에서는 .ID를 사용할 것이지만 두 테이블을 조인 할 수있는 모든 필드 (ID, SSN, TIN, ACCT 등)로 변경해야합니다.

당신은 스왑한다. * 당신이 필요로하는 실제 열에 대해, 그 표 centersSELECT 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%' 
; 
0

간단한 데이터베이스 모델을 보여줄 수 있습니까?

"센터에는 위치 관계가 있고 위치 필드에도 쿼리를 원합니다."Location.country = something "찾고있는 다른 테이블이 있습니다 에 가입하십시오.

조회에서 열이 반환되는 정의 (열 제목의 별을 교환하고, 어쩌면 테이블 이름을 접두사.)해야

봐 여기 조인에 대한 자세한 내용은. SQL 올바른 기록을 가입하는 방법을 알 수 있도록

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

0

당신 것 JOIN 테이블 location처럼. location 및 외래 키 열 location_id로 구현되어 centers 사이의 N 관계 : 당신을 가정

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 있습니다.

SQL 삽입을 피하기 위해 prepared statement를 사용하십시오.

0

이 쿼리를 수행해야이 전적으로는 SQL 질문이기 때문에 대답에서 모든 응용 프로그램 코드를 제거한

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

참고.