2011-07-27 2 views
2

나는 마지막으로 제품이 업데이트되었음을 ​​나타내는 주식 필드와 타임 스탬프 필드가있는 제품 테이블을 가지고 있습니다.MySQL, 조건에 대한 약간의 도움

재고가 0보다 큰 모든 제품을 가져 오는 쿼리를 작성해야하며, 재고 = 0 인 경우 타임 스탬프와 현재 시간의 차이가 30 일 미만인지 확인해야합니다. stock = 0 및 datediff (now(), timestamp)> 30이면 레코드 세트에서 제품을 제외합니다.

지금까지 쿼리를 작성했지만 (아래 참조) 지난 30 일 동안 업데이트되지 않았을 때 주식> 0 인 제품조차 제외하므로 올바르지 않습니다.

select * from products where stock>=0 and datediff(now(), timestamp)>=30; 

답변

2

당신이 원하는 무엇인가인가?

SELECT * FROM products WHERE stock > 0 OR stock = 0 AND DATEDIFF(NOW(), timestamp) <= 30; 

stock 필드가 서명되지 않은 경우 'stock = 0'조건을 제거 할 수 있습니다.

+0

와우, 완전히 나를 그리워! 그것은 결국 간단했습니다. 고마워. – bikey77

+0

이 게시했습니다 ... OR 조건을 둘러싼 괄호가 누락 되었습니까? – Randy

+0

예이 쿼리가 잘못되었습니다 –

1

편집 : 의견으로 당

, 여기에 답 매우 난해한 질문

SELECT * FROM products WHERE stock > 0 
OR (stock = 0 and DATEDIFF(NOW(), timestamp) <= 30); 
+0

요령은 재고가 0 인 제품을 얻는 것이지만 최근에 업데이트되었습니다 (지난 30 일 동안). 더 큰 그림을 얻으려면 제품 중단을 고려한 30 일의 시간 마진이 있으며 재고가 0으로 설정되면 기간이 시작됩니다. – bikey77

1
SELECT * FROM products 
WHERE 
     stock>0 
OR (
     stock=0 
     AND datediff(now(), timestamp)<=30 
); 
+0

지금이 하나 나는 읽을 수 있고 그것이 맞는지 질문하지 않는다. – Randy

+0

@Randy, 날짜에 대한 비교가 틀린 방향이기 때문에 당신은 그것이 틀린 것을 알고있다? – jswolf19