2011-03-09 5 views
1

두 개의 다른 테이블을 사용하여 검색 결과를 얻을 수있는 쿼리가 필요합니다.MySQL을 사용하여 복잡한 쿼리를 작성하는 데 문제가 있습니다.

입력은 $ _GET에서 주어진 $tagID입니다. 첫 번째 테이블 인 coupons_tags에는 tagID 필드와 couponID 필드가 있습니다. 두 번째 테이블 인 쿠폰에는 쿠폰 ID 필드가 있고 나머지 필드는 내가 원하는 정보입니다.

$ _GET의 입력 변수와 일치하는 모든 쿠폰을 찾을 수있는 쿼리를 어떻게 실행하면 좋을까요? 다중 쿼리를 사용하여 세미 작업을했지만 코드가 끔찍했습니다. 다중 테이블 쿼리를 처음 접했기 때문입니다.

저는 MySQL과 PHP를 사용하고 있습니다.

+0

태그 및 컵이있는 테이블 정의를 보여줍니다. – bensiu

답변

1

여기에 SQL 쿼리가 시작되었습니다. PHP로 호출하는 방법을 확신합니다.

SELECT coupons.something, coupons.somethingelse 
FROM coupons_tags, coupons 
WHERE coupons_tags.coupons_id = coupons.coupons_id 
    AND coupons_tags.tag_id = $tagID 

각 가로 행의 두 테이블에 동일한 coupons_id가 있도록 테이블을 나란히 배치한다고 생각할 수 있습니다.

두 번째 where 절은 원하지 않는 태그를 걸러냅니다. 솔루션 jkj이 작동을 제공 한 반면

2

, 그것은 특히 혼합 한 절, 즉 WHERE 절에 조건 필터 조건을 조인 테이블을 결합의 이전 방법을 사용합니다.

현재 표준 방식으로 가입 논리를 필터 논리에서 분리 할 수있는 전용 키워드를 제안하므로 쿼리가 명확 해집니다. 여기

는 현재의 기준에 따라 갈 것입니다 방법은 다음과 같습니다

여기
SELECT c.* 
FROM coupons_tags ct 
    INNER JOIN coupons c ON ct.couponID = c.couponID 
WHERE ct.tagID = $tagID 

당신이 (가) INNER JOIN 절에 가입하고 퍼팅을 지정하는이 이렇게 떠나는 ON 키워드 후 상태, ct.couponID = c.couponID 가입 필터 조건, ct.tagID = $tagID, WHERE 절.

이 솔루션은 테이블 별칭 (ct, c)도 제공하므로 여러 테이블을 쿼리해야 할 때 스크립트를 더 쉽게 읽을 수 있습니다.

여러 테이블을 쿼리 할 때 * 또는 alias.* 대신 특정 테이블 열을 지정하면 테이블 별칭도 함께 포함해야합니다. 일부 열은 쿼리하는 테이블 중 하나에 만 존재하므로 DB 엔진이 그 열이 속한 테이블을 알아내는 것을 혼동하지 않으므로 항상 필요한 것은 아니지만 항상 그렇게하는 것이 좋습니다. 첨부 된 별칭은 다시 스크립트의 가독성과 유지 보수성을 향상시킵니다.

관련 문제