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!
xacuop viết 20:26 ngày 09/10/2018
Bạn dùng Group By trong câu SQL thì được.
GROUP BY roomName
snoopy viết 20:24 ngày 09/10/2018
Dùng group by k được đâu bạn ơi, trong cái view mình tạo ra thì khi dùng recordset để lấy dữ liệu thì ta được các field sau: rs("RoomName"), rs("RoomTypeName"), rs("Price") như vậy mỗi lần đọc rs thì nó chỉ lấy ra được 3 filed này thôi... Có bạn nào có gặp wa truởng hợp này k, chỉ mình giúp với...
mel viết 20:38 ngày 09/10/2018
Người ta đâu có hỏi câu lệnh SQL đâu, người ta chỉ hỏi làm thế nào ... trong asp thôi. Có 2 cách giải quyết:
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.
bete viết 20:37 ngày 09/10/2018
Thân gửi snoopy:

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
PHP Developer viết 20:34 ngày 09/10/2018
To thu cau nay chay rat ngon

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')
snoopy viết 20:23 ngày 09/10/2018
Mình đã làm được theo câu query của bạn, cám ơn nhìu, bạn có thể giải thích về câu query này rõ hơn đễ có thể hiểu rõ cấu trúc của nó k?
Bài liên quan
0