2013-07-31 3 views
0

블로그를 만들고 싶습니다. 두 개의 테이블을 만듭니다.MySQL LIKE가 잘못된 결과를 나타냅니다.

ID  Name of Category 

저는 기사 테이블을 만듭니다.

ID CATEGORY_ID ARTICLE 

각 기사를 여러 범주에 추가하고 ID를 쉼표로 구분 된 값으로 CATEGORY_ID 필드에 저장합니다. 즉

ID CATEGORY_ID Article 
1  1,2,3   xyz 

2  1,5   ghjy.............. 

3  2,4,6   hgyr.............. 

이제 카테고리 페이지에 기사를 게시하고 싶습니다.

$QUERY = "SELECT * FROM article_table WHERE category_id like '%category_id%' ORDER BY id DESC"; 

위의 쿼리에서 모두 똑같은 두 가지 카테고리가있을 때까지 모두 양호합니다. 카테고리 20,21,22,23 등의 모든 기사도 카테고리 페이지 2에 표시됩니다. 어떻게 피합니까? '% - %'이 문제의 원인입니다.

내 질문 : 동적으로 다른 페이지에 다른 카테고리의 기사를 표시하고 싶습니다.

아무도 도와 줄 수 있습니까 ??? 당신이 MySQL을 사용하는 경우

+0

mysql_ * 또는 PDO 또는 mysqli를 사용하고 있습니까? –

+1

article_category 연결 테이블을 갖도록 데이터 구조를 수정하십시오. 목록을 쉼표로 구분 된 값으로 저장하지 마십시오. –

+0

대신에 정규식을 사용하십시오. – vidyadhar

답변

0

, 당신은 발견하고자하는 카테고리가 존재하는지 확인하기 위해 FIND_IN_SET 기능을 사용할 수 있습니다

시도 : 'searchForId'는 카테고리 ID로 대체됩니다

SELECT * FROM article_table WHERE FIND_IN_SET('searchForId', category_id) > 0 ORDER BY id DESC; 

당신 찾고 계십니까

+0

답변 해 주셔서 감사합니다. 나는 또한 많은 곳에서 이것을 보았지만 내 경우에는 이것이 효과가 없다. 그것은 출현의 장소 만 찾고 있지만 긍정적 인 대답을주지는 않습니다. –

+0

고맙습니다. 나는 대답을 얻었다. 실제로 데이터를 추가하는 동안 1, 2, 3, 4와 같은 값 사이에 공백을 남기고 FIND_IN_SET이 결과를 얻지 못했습니다. 이제 1,2,3,4,5 공백을 제거하고 쿼리가 작동했습니다 ... –

0

테이블을 정규화하는 것이 좋습니다. 여기에 실제로있는 것은 일대 다 관계가 하나의 테이블에 쌓여있는 것입니다. 당신의 기사 테이블은 단지 ID와 내용이

ID Article 
1  xyz 

2  ghjy.............. 

3  hgyr.............. 

그리고 쿼리는 다음 될 것 article_category_map 두 번째 테이블의 이름을 가정 범주

ARTICLE_ID CATEGORY_ID 
1    1 
1    2 
1    3 

2    1 
2    5    

3    2 
3    4 
3    6 

을 보유하는 두 번째 테이블을 만들 단순화 할 수있다 :

SELECT a.ID, acm.CATEGORY_ID, acm.Article 
FROM article_category_map acm 
inner join article_table a on acm.ARTICLE_ID = a.ID 
WHERE acm.CATEGORY_ID = %category_id% 
ORDER BY a.id DESC 
관련 문제