2012-11-16 3 views
5

간단한 캘린더를 구현하는 동안 막 다른 골목을 찾아 왔습니다. 그건 내 주 '테이블 스키마입니다 :간단한 캘린더 구현

DROP TABLE IF EXISTS `weeks`; 
CREATE TABLE `weeks` (
    `weeknum` varchar(255) NOT NULL DEFAULT '', 
    `period1` varchar(255) DEFAULT NULL, 
    `period2` varchar(255) DEFAULT NULL, 
    `A11` varchar(255) DEFAULT NULL, 
    `A22` varchar(255) DEFAULT NULL, 
    `A31` varchar(255) DEFAULT NULL, 
    `A32` varchar(255) DEFAULT NULL, 
    `C11` varchar(255) DEFAULT NULL, 
    `C12` varchar(255) DEFAULT NULL, 
    `C21` varchar(255) DEFAULT NULL, 
    `C22` varchar(255) DEFAULT NULL, 
    `C31` varchar(255) DEFAULT NULL, 
    `C32` varchar(255) DEFAULT NULL, 
    `D11` varchar(255) DEFAULT NULL, 
    `D12` varchar(255) DEFAULT NULL, 
    `D21` varchar(255) DEFAULT NULL, 
    `D22` varchar(255) DEFAULT NULL, 
    `D31` varchar(255) DEFAULT NULL, 
    `D32` varchar(255) DEFAULT NULL, 
    `E11` varchar(255) DEFAULT NULL, 
    `E12` varchar(255) DEFAULT NULL, 
    `E21` varchar(255) DEFAULT NULL, 
    `E22` varchar(255) DEFAULT NULL, 
    `E31` varchar(255) DEFAULT NULL, 
    `E32` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`weeknum`) 
) ENGINE=InnoDB DEFAULT CHARSET=greek; 

열 이름은 방 숫자와 WEEKNUM가 인수로 WEEKNUM을 포함하는 쿼리 (예 : 40)을 실행 한 후 45 15에서 값을 사용합니다, 나는 몇 가지를 얻을 수 방 번호 (E31, E32 등). 쿼리의 결과에 따라 적절한 행과 열에 대해 셀 값을 "yes"로 설정하기 만하면됩니다. 예를 들면 :

select room.roomnum 
from payment,contract,room,customer 
where payment.contractID = contract.contractID 
and contract.roomID=room.roomID 
and customer.customerID=payment.customerID 
and payment.yearkoino='2009' and contract.weeknum=40 

를 실행 한 후 내가 얻을 :

http://img37.imageshack.us/img37/7633/screenshotoy.png

:

+---------+ 
| roomnum | 
+---------+ 
| c21 | 
| a32 | 
| c12 | 
| d12 | 
| d11 | 
| e22 | 
| a22 | 
| c31 | 
| e12 | 
+---------+ 

이 또한 당신에게 내가 뭘하려고 오전의 아이디어를 줄 수있는 스크린 샷입니다

도움이 될 것입니다.

+2

안녕하세요. 나중에 귀하의 게시물 형식을 지정하십시오. 나는 이번에 당신을 위해 해 봤습니다 - 내가 한 짓과 내가했던 것을 배우기 위해 작은 이름의 "편집 된 X 분 전"을 클릭하여 처음 게시 한 것의 차이점을 살펴보십시오. =) –

+0

btw [Dateformat] (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format) –

+1

도 좋습니다. 방 번호를 collumns로 설정하십시오. –

답변

1

일반적으로 이러한 유형의 작업에 세 번째 정규 형식을 사용하는 것이 좋습니다.

주별 테이블 하나, 룸 테이블 한 개, RoomWeek 관계를 추적하는 세 번째 테이블.

RoomWeek 두 분야의 최소 것 - RoomNum, Room.RoomNum WEEKNUM의 아이, Week.WekNum 상태의 아이를,

다음 필요에 따라 "예/아니오"등 다른 필드 추적하지 단계는 모든 가능성에 대해 한 행을 얻기 위해 Room 및 Week 테이블에서 RoomWeek에 교차 조인을 채우는 것입니다.

주어진 일주일 동안 방 목록을 반환하는 쿼리가있을 때 그럼 당신은 할 것이라고는 훨씬 더 어렵 BC 그런 다음 현재 테이블을 업데이트 주장하는 경우

update RoomWeek, payment,contract,room,customer 
set RoomWeek.status = "Yes" 
where payment.contractID = contract.contractID 
and contract.roomID=room.roomID 
and customer.customerID=payment.customerID 
and payment.yearkoino='2009' and contract.weeknum=40 
and RoomWeek.weeknum = contract.weeknum 
and RoomWeek.Roomnum = room.roomnum 

같은 자사의 까다로운 Week와 같은 테이블을 업데이트하려면 업데이트하려는 열이 데이터 자체 (반환 된 roomnum)에 따라 달라집니다 - 가능하지만 객실이 변경되면 테이블이 변경되고 코드가 변경되어야 할 수 있습니다.

관련 문제