09/10/2018, 18:21
Giúp hiển thị dử liệu của 2 table quan hệ n - n
Mình có 2 table quan hệ như sau:
RoomType: RoomTypeID, RoomTypeName
Room: RoomID, RoomName
--> RoomPrice: RoomID, RoomTypeID, Price
--> tạo 1 query để kết hợp 3 table lại: SELECT RoomName, RoomTypeName, Price FROM RoomType INNER JOIN (Room INNER JOIN RoomPrice ON Room.RoomID = RoomPrice.RoomID) ON RoomType.RoomTypeID = RoomPrice.RoomTypeID
Kết quả của query này là những record như sau:
roomName - roomtypeName - Price
Standard - Single - 10
Standard - Twin - 20
Standard - Trio - 25
Deluxe - Single - 20
Deluxe - Twin - 30
Deluxe - Trio - 35
...
Các bạn cho mình hỏi trong code asp làm thế nào để display các query(view) này hiển thị ra với kiếu sau:
Room - Single - Twin - Trio
Standard - 10 - 20 - 25
Deluxe - 20 - 30 - 35
Cám ơn!
RoomType: RoomTypeID, RoomTypeName
Room: RoomID, RoomName
--> RoomPrice: RoomID, RoomTypeID, Price
--> tạo 1 query để kết hợp 3 table lại: SELECT RoomName, RoomTypeName, Price FROM RoomType INNER JOIN (Room INNER JOIN RoomPrice ON Room.RoomID = RoomPrice.RoomID) ON RoomType.RoomTypeID = RoomPrice.RoomTypeID
Kết quả của query này là những record như sau:
roomName - roomtypeName - Price
Standard - Single - 10
Standard - Twin - 20
Standard - Trio - 25
Deluxe - Single - 20
Deluxe - Twin - 30
Deluxe - Trio - 35
...
Các bạn cho mình hỏi trong code asp làm thế nào để display các query(view) này hiển thị ra với kiếu sau:
Room - Single - Twin - Trio
Standard - 10 - 20 - 25
Deluxe - 20 - 30 - 35
Cám ơn!
Bài liên quan
GROUP BY roomName
1. Sửa lại CSDL !!??? Nếu như mình chỉ có 3 cột (Single, Twin, Trio) thì Mel đề nghị 1 CSDL như sau:
ROOM (ROOM_ID, ROOM_NAME)
ROOMPRICE(PRICE_ID,ROOM_ID,SINGLE, TWIN, TRIO)
2. Theo Mel thì cần phải sử dụng 3 câu sql. Câu thứ nhất lấy ra RoomTypeName, câu thứ 2 lấy ra các RoomName. Câu cuối cùng thì sẽ lấy ra giá của phòng tương ứng với loại phòng và tên phòng.
Tui nghĩ có ít nhứt 2 cách:
1) Bạn thêm "order by RoomName" để khi đọc thì các record có cùng RoomName sẽ đi sát nhau => đọc từng bộ 3 record một => in thành 1 dòng (nếu cần thì thêm "order by RoomTypeName")
2) Sửa cái query lại thành:
SELECT Room.RoomName,
SingleRoomType.RoomTypeName SingleType,
SingleRoomPrice.Price SinglePrice,
TwinRoomType.RoomTypeName TwinType,
TwinRoomPrice.Price TwinPrice,
TrioRoomType.RoomTypeName TrioType,
TrioRoomPrice.Price TrioPrice
FROM Room,
RoomType SingleRoomType, RoomPrice SingleRoomPrice,
RoomType TwinRoomType, RoomPrice TwinRoomPrice,
RoomType TrioRoomType, RoomPrice TrioRoomPrice
WHERE
Room.RoomID = SingleRoomPrice.RoomID
AND SingleRoomType.RoomTypeID = SingleRoomPrice.RoomTypeID
AND SingleRoomType.RoomTypeName = 'Single'
AND Room.RoomID = TwinRoomPrice.RoomID
AND TwinRoomType.RoomTypeID = TwinRoomPrice.RoomTypeID
AND TwinRoomType.RoomTypeName = 'Twin'
AND Room.RoomID = TrioRoomPrice.RoomID
AND TrioRoomType.RoomTypeID = TrioRoomPrice.RoomTypeID
AND TrioRoomType.RoomTypeName = 'Trio'
(có thể phải xài OUTER join)
=> cái query nhìn phát ớn !!! Hơn nữa nếu mình thêm 1 kiểu roomTypeName mới thì chết chắc (phải sửa query thành rắc rối hơn)
(có gì sai sót xin các bạn chỉ giúp, cám ơn)
-thân
SELECT DISTINCT A.ROOMNAME, C.PRICE AS SINGLES, D.PRICE AS TWIN, E.PRICE AS TRIO
FROM ROOM AS A, ROOMPRICE AS D, ROOMPRICE AS C,ROOMPRICE E
WHERE A.ROOMID=C.ROOMID And C.ROOMTYPEID=(SELECT ROOMTYPEID FROM ROOMTYPE WHERE ROOMTYPENAME='TWIN')
AND A.ROOMID=D.ROOMID And D.ROOMTYPEID =(SELECT ROOMTYPEID FROM ROOMTYPE WHERE ROOMTYPENAME='SINGLE')
AND A.ROOMID=E.ROOMID And E.ROOMTYPEID =(SELECT ROOMTYPEID FROM ROOMTYPE WHERE ROOMTYPENAME='TRIO')