2010-05-18 15 views
2

데이터베이스가 2 개 있습니다. 하나는 properties이고 다른 하나는 dates입니다. dates에서 land_id와 날짜 (YYYYMMDD 형식)가 연결되어있어서 을 사용할 수 없다는 의미입니다..MySQL 쿼리, 날짜 범위 "블랙리스트"

사용자가 시작 날짜와 종료 날짜를 지정할 수있는 쿼리를 작성한 다음 데이터베이스가 아닌 date이 아닌 날짜를 사용할 수있는 속성을 선택해야합니다. 항공사 및 호텔 웹 사이트는 이러한 종류의 논리를 어떻게합니까? 날짜 범위를 가져 와서 사이의 모든 요일을 선택하고 날짜가 일치하지 않는 쿼리를 수행하고 결과의 수를 순서대로 정렬하는 방법에 대해 생각해 보았습니다. 그러나 이것이 어떻게 강렬한 쿼리로 쉽게 바뀔 수 있는지를 알 수 있습니다. VARCHAR로 날짜를 갖는

CREATE TABLE IF NOT EXISTS `dates` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `land_id` int(11) NOT NULL, 
    `date` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=44 ; 

-- 
-- Dumping data for table `dates` 
-- 

INSERT INTO `dates` (`id`, `land_id`, `date`) VALUES 
(43, 1, '20100526'), 
(39, 1, '20100522'), 
(40, 1, '20100523'), 
(41, 1, '20100521'), 
(42, 1, '20100525'); 
+0

날짜를 독점적으로 설계된 데이터 형식으로 날짜를 저장하십시오 :'date' – zerkms

+0

zerkms, 답장을 보내 주셔서 감사합니다. 그러나 이것은 올바른 속성을 가져 오는 데 필요한 로직을 해결하지 못합니까? :) – erbaker

+0

내 대답을 자주 편집 해 주셔서 죄송합니다. , 나는 지금 ok이어야한다라고 생각한다. .. – Simon

답변

2

은 열심히 쿼리를 작성하는 것. 을 사용하여 날짜를 DATE으로 저장하고 다음 쿼리를 사용하는 것이 좋습니다. 이 도움이 될 것입니다

SELECT * FROM dates WHERE date NOT BETWEEN '<start_date>' AND '<end_date>' 

그것은 날짜가 지정된 범위 사이에없는 선택합니다.

이 나도는 VARCHAR와 함께 작동하도록하기 위해 MySQL 5.1. reference의 해결책을 발견 :

SELECT STR_TO_DATE(date,'%Y%m%d') as real_date 
FROM dates WHERE real_date NOT BETWEEN '<start_date>' AND '<end_date>' 

또는

SELECT DATE(date) as real_date 
FROM dates WHERE real_date NOT BETWEEN '<start_date>' AND '<end_date>' 

가 BTW : <start_date><end_date>이 자리 표시 자입니다. 구체적인 날짜를 YYYY-MM-DD 형식으로 입력하십시오.