2012-11-16 18 views
5

Basit bir takvim uygulamaya çalışırken çıkmaz bir noktaya geldim. Bu benim haftalık tablo şema var:Basit bir takvim uygulama

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; 

Sütun adları oda sayılardır ve WEEKNUM bağımsız değişken olarak WEEKNUM içeren bir sorgu (örneğin 40) çalıştırdıktan sonra 45'e 15 ila değerleri alır, bazı olsun oda numaraları (E31, E32 vs). Sadece sorgunun sonucuna bağlı olarak hücre değerini uygun satır ve sütun için “evet” olarak ayarlamak istiyorum. Örneğin:

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 

çalıştırdıktan sonra alıyorum:

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

:

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

bu da size ben yapmaya çalışıyorum bir fikir verebilir bir ekran görüntüsü

Herhangi bir yardım mutluluk duyacaktır.

+2

Merhaba, ve hoş geldiniz! Lütfen gönderilerinizi gelecekte biçimlendirmeye dikkat edin. Bu sefer sizin için yaptım - ne yaptığımı ve ne yaptığımı öğrenmek için ismimin üstünde küçük "düzenlenmiş X dakika önce" üzerine tıklayarak ilk yaptığınız arasındaki farklara bir göz atın. =) –

+0

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

+1

Ayrıca seni önermem oda numaralarını kolim olarak ayarla –

cevap

1

Genel olarak, bu tür görevler için üçüncü normal formu kullanması daha iyi olur.

Haftalar için bir masa, Odalar için bir, ve daha sonra RoomWeek ilişkisini izleyen üçüncü bir tablo.

RoomWeek iki alandan en az olurdu - RoomNum, Room.RoomNum WEEKNUM çocuğu, Week.WekNum Durumu çocuk,

sonraki gerektiği gibi "Evet/Hayır" vb diğer alanlarda izlemek adım RoomWeek'i, her olasılık için bir satır almak için Oda ve Haftalık Tablolardan bir çapraz katılımla doldurmak olacaktır.

belirli bir hafta için bir oda listesini döndürür bir sorgu olduğunda Öyleyse o zaman yapacağını kendi çok daha zor bc sonra geçerli tabloyu güncelleme konusunda ısrar ediyorsanız

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 

gibi bir şey onun zor güncellemek istediğiniz sütunun, verilerin kendisine (odanın geri döndüğü) bağlı olduğu Hafta gibi bir tabloyu güncellemek için - bu yapmak mümkündür, ancak odalar değişirse, tablonuz değişmeli, kodun değişmesi gerekebilir.