Temat: Zapytanie w SQL
W sumie zrobilem projekt. Baza danych hotelu. baza w db2 interfejs w php/html.
Zadaniem tego jest aby z podanych nizej tabel uzuskac dane na temat tego ile hotel zarobil na gosciu 'Kowalski' ale w jednym zapytaniu sql! (gora w dwoch). Ja to zrobie ale w prostacki sposob i przy pomocy php a nie w sql.
create table historia (
lp int PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
nazwisko char(25),
pokoj int NOT NULL,
od date NOT NULL,
do date NOT NULL,
) @
Insert into historia values (DEFAULT,'Kowalski',204,'2008-10-10', '2008-10-13') @
Insert into historia values (DEFAULT,'Kowalski',101,'2008-11-11', '2008-11-16') @
drop table pokoje@
create table pokoje (
pokoj int PRIMARY KEY NOT NULL,
cena decimal (5,2),
od date,
do date,
) @
Insert into pokoje (pokoj, cena,) values (101, 250.00,) @
Insert into pokoje (pokoj, cena,) values (102, 250.00,) @
Insert into pokoje (pokoj, cena,) values (203, 400.00,) @
Insert into pokoje (pokoj, cena,) values (204, 400.00,) @
Insert into pokoje (pokoj, cena,) values (305, 550.00,) @
O ile sie orintuje to trzeba:
- wyciagnac z historii pokoj,od,do gdzie nazwisko = 'kowalski' a potem dla kazdego rekordu
- odjac daty aby miec ilosc dni(przeliczajac na intigery i dzielac przez 8400) potem
- z pokoje wyluskac cena i pomnozyc razy ilosc dni
TYLKO JAK TO ZROBIC W JEDNYM ZAPYTANIU??
Pisze z prosba o pomoc bo naprawde jestm w kropce... zrobilem to w php (ponizej) ale to nie wystarczylo.
$statement = "SELECT * FROM historia WHERE nazwisko = 'Kowalski'";
$res = odbc_exec($dbconn,$statement);
$suma = 0;
while (odbc_fetch_row($res)){
$pokoj = odbc_result($res,'pokoj');
$od = odbc_result($res,'od');
$do = odbc_result($res,'do');
$state= "SELECT cena FROM pokoje where pokoj=$pokoj";
$result = odbc_exec($dbconn,$state);
$cena = odbc_result($result,'cena');
$czas = (strtotime("$do GMT")- strtotime("$od GMT"))/86400;
$kwota = ($czas*$cena);
$suma = $suma + $kwota;
}
Jesli ktos potrafi to napisac w sql w troche dluzszej formie niz 1-2 linie to tez prosze sie nie krepowac. Zawsze sie czegos naucze.
Z gory dzieki za pomoc (jesli to sie da zrobic), a jak nie to za dobre checi.