2011-05-09 4 views
0

나는 상점 시스템을 개발 중이며 검색에 문제가 있습니다. 언어 나 성별을 포함하는 기사를 검색하는 것은 문제가되지 않지만 선택한 기사 만 기사를 얻는 데 어려움을 겪고 있습니다. MySQL- 선택한 언어로만 기사를 가져 오는 쿼리

는 사용 된 테이블의 예는 다음과 같습니다

기사

id | int(11) | Primary Key | auto_increment 
name | tinytext | 

언어

article_id | int(11) | Primary Key 
language_id | int(11) | Primary Key 

그래서 내가 지금 알고 싶어

id | int(11) | Primary Key | auto_increment 
lang | tinytext | 

article_languages하는 기사에는 언어 (예 : 영어)가 있지만 다른 언어 (독일어, 터키어, 스페인어 등)는 없습니다. 많은 것을 시도했지만 올바른 결과를 얻지 못했습니다.

올바른 데이터베이스 구조입니까? 그리고 그것이 맞다면, 올바른 행을 선택하는 방법. 내 뇌가 나를 죽이고있어 ...

희망이 정보는 충분하다.

인사말 iNaD

PS : 내 나쁜 영어 SRY :(예를 들어

답변

1

이것은 최선의 방법은 아니지만 작동합니다. 우리가 하나의 언어만을 가진 기사를 선택하기를 원했기 때문에 먼저 각 기사의 언어 수를 알아야합니다. article_id로 article_languages의 결과를 그룹화하고 COUNT aggregate function을 사용하여 'languages_count'를 생성하여이 작업을 수행했습니다.

WHERE 절을 파생 된 열과 함께 사용할 수 없습니다 (잘못된 것 같아요.) 그래서 하위 쿼리 및 외부 쿼리로 결과를 WHERE, 또한 실제 기사를 가져 오는 데 JOIN을 수행합니다. 그 결과

에 관계없이 해당 언어가 (다른 답변을 참조하지 않을 경우 I, 즉 당신이 원하는 무엇 희망) 무엇인지, 하나의 언어 만이 모든 기사 반환이 쿼리 :

SELECT a.* FROM (SELECT article_id,language_id,COUNT(article_id) AS languages_count FROM article_languages GROUP BY article_id) AS al LEFT JOIN articles AS a ON al.article_id = a.id WHERE al.languages_count = 1; 
+0

와우 이것은 내가 원했던 것입니다 :) 희망은 거기에 이것보다 더 나은 대답이 될 것이지만, 나는 그것을 사용합니다 :) – theiNaD

0

: 이미 (이 예에서는 1) 언어 ID를 알고있는 경우

SELECT a.* FROM articles as a, languages as l, article_languages as al WHERE l.id = al.language_id AND a.id = al.article_id AND l.lang = 'ENGLISH'; 

하는 것이 될 것입니다 :

SELECT a.* FROM articles as a, article_languages as al WHERE a.id = al.article_id AND al.language_id = 1; 
관련 문제