2012-01-15 2 views
0

두 개의 MySQL 테이블 'sections'과 'pages'가 있습니다.두 번째 테이블이 데이터를 반환하는지 여부와 상관없이 첫 번째 테이블 데이터를 반환합니다. 연산자 결합 표준화

하나 또는 두 테이블에서 데이터를 가져 오기 위해 단일 쿼리를 사용하려고합니다.

섹션과 페이지가 있으면 AND 연산자가 올바르게 작동합니다.

섹션과 페이지가 존재하지 않으면 AND 연산자도 좋습니다.

그러나 페이지가 존재하지 않는 경우 (AND 연산자 문제) index.php urls (사이트의 모든 index.php 페이지를 가져옴)와 관련하여 섹션 테이블을 가져 오는 방법을 찾지 못하는 것 같습니다. 내가 지금 여기에 더 나은 쿼리를 작성하기 위해 노력하고있어

내 목표와 내가 무엇을 시도했다 ... 나는 부분 일치 한 다음 반복 모든 페이지를 당겨하지 않으

있습니다.

단일 쿼리에서 두 번째 쿼리를 실행할 때 리소스를 낭비하고 싶지 않습니다.

'index.php'URL이있는 페이지는 모든 섹션을 가져 오기 때문에 현재 조건부 검색어가 두 개 있습니다 (특정 페이지로드에 대해 하나만 실행됩니다).

페이지 테이블에서도 LEFT JOIN을 시도했지만 섹션 테이블과 함께 FROM을 사용했습니다.

이 인덱스가 다른 페이지에 작동 ...

(SELECT NULL AS meta_description FROM sections WHERE url = 'example') 
UNION 
(SELECT meta_description FROM pages WHERE url = 'something'); 

그 쿼리가 두 행까지 반환하고 작업하기에 충분히 용이하다.


섹션 및 페이지, 페이지하지 않는,

SELECT * 
FROM sections AS cs 
LEFT JOIN pages AS cp ON (cp.id_section = cs.id) 
WHERE cs.section_url LIKE BINARY 'section_url' AND cp.url LIKE BINARY 'index.php' 

섹션이 존재 ... 반환 될 존재 0 행을 반환 ...

SELECT * 
FROM sections AS cs 
LEFT JOIN pages AS cp ON (cp.id_section = cs.id) 
WHERE cs.section_url LIKE BINARY 'section_url' AND cp.url LIKE BINARY 'not_exist' 

테이블 구조 ...

,

페이지 : 아이디, SECTION_ID, meta_description, meta_language, meta_robots, 제목, URL

섹션 :

가 가장 중요한 것은 내가 보장 할 아이디, SECTION_ID, meta_description, meta_language, meta_robots, 제목, URL 궁극적으로 MySQL에서 PostgreSQL으로 마이그레이션 할 계획이므로 구문은 SQL 중립적입니다.

설명을 추가해 드리겠습니다. 누군가가 실무적인 대답을 내놓을 수 있다면 나는 그것을 받아들이고 그것을 높이 평가할 것이다.내가 정확히 당신이 달성하려는 모르겠어요,하지만이 시도로

+0

당신은 당신이하고 작동하지 않는 쿼리를 게시 할 수 있습니까? –

+0

나는 매우 혼란 스럽다. 당신이 묻고있는 것을 명확히하는 데 도움이 될 수있는 몇 가지 사항 : (1) 테이블 정의 게시; (2) 'AND'를 사용하여 언급 한 검색어를 게시합니다. (3) 'LEFT JOIN'을 사용하는 쿼리를 게시합니다. – ruakh

+0

게시물 편집에 대한 작업이 ... – John

답변

2

대부분 추측 :

SELECT * 
FROM sections AS cs 
LEFT JOIN pages AS cp ON (cp.id_section = cs.id AND cp.url LIKE BINARY 'not exists') 
WHERE cs.section_url LIKE BINARY 'section_url' 
+0

시도해보기 ... – John

+0

처음에는 테이블 구조로 무언가를 알아 내야 할 필요가 있습니다. 대답이 될 수도 있습니다. 그것에 노력하고 ... – John

+0

좋아, 행운을 빌어 요. :-) 주어진 id_section이있는 페이지가 두 개 이상있는 경우 해당 섹션 (여러 페이지가있는 각 행)에 대해 여러 행을 가져옵니다. 하지만 조인의 경우에는 도움이되지 않습니다. – Seramme

관련 문제