2017-05-24 8 views
-2

나는 모든 다른 카테고리의 최신 게시물을 찾아내어 그들을 에코하는 SQL 있습니다.Mysql 테이블에서 최신 게시물을 얻을하지만, 해당 레이블이 숨겨져 있는지 확인

하지만 해당 카테고리에서 최신 게시물 1 (볼 대신 0)의 값이라는 이름의 테이블 hidden을 가지고 발생할 수 있습니다.

해당 항목을 표시하고 싶지 않지만 그 범주에서 다른 게시물을 찾으려면 이 아니고이 숨겨져 있습니다.

SELECT m1.* 
FROM dbcontent m1 
LEFT JOIN dbcontent m2 ON (m1.category_name = m2.category_name AND m1.date_create < m2.date_create) 
WHERE m2.date_create IS NULL 
AND NOT m1.hidden > 0 
ORDER BY c_id ASC" 

단순히 위의 SQL은 숨김으로이 표시 않다면 전체 카테고리를 무시하지만이 값 hidden = 0이있는 표시 할 수 범주에서 다른 이전 게시물이 있는지 확인하지 않습니다.

+0

1.Don't 형식을 당신은 그런 식으로 SQL 문을 코드 스타일에 넣는다. 대신에 enum 대신에 0/1을 사용하거나, 0/1 사용 비트를 사용하려면 int를 사용하지 말아야한다. 3.이 부분과 'm1.hidden> 0'은 의미가 없습니다. mysql에 관한이 책 ('MySql Cookbook Paul DuBois')을 읽어야한다. 어디서부터 시작해야하는지에 대한 훌륭한 참고서이다. 행운을 빈다. – DaAmidza

답변

1

검색어에 상충되는 조건 (예 : m1.date_create < m2.date_createm2.date_create IS NULL)이있는 것 같습니다. 둘 다 동시에 적용되지 않습니다.

당신이 다음 아래와 같은 서브 쿼리를 사용할 수있는 카테고리 별 최신이 아닌 숨겨진 아이템을 얻고 싶다면 (당신은 심지어 JOIN 필요가 없습니다) :

SELECT * 
FROM dbcontent 
WHERE post_id in (
SELECT post_id, category_name, MAX(date_create) 
FROM dbcontent 
WHERE hidden = 0 
GROUP BY post_id, category_name 
);