1

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.

2

Odp: Zapytanie w SQL

select pokoj, extract(day from do-od)*cena from historia,pokoje where nazwisko='Kowalski' and pokoje.pokoj=historia.pokoj;

nie sprawdzilem czy dziala ale moze cos analogicznego. tylko nie wiem po co w pokojach jest od i do. chcesz roznicowac ceny w zaleznosci od dat?

3

Odp: Zapytanie w SQL

SQL0203N  A reference to column "POKOJ" is ambiguous.  SQLSTATE=42702
Dwuznaczne odniesienie do pokoj?  Nie spotkalem sie z czyms takim i nie specjalnie wiem co z tym zrobic ale samo polecenie przechodzi. Daty idzie odejmowac normalnie (zwraca roznice dni ze zwyklego odejmowania do-od wiec z tym nie trzeba kombinowac).

Wiesz moze z czego wynika ten blad?

4

Odp: Zapytanie w SQL

chodzi o to że kolumna pokój (a takze od i do) wystepuje w wiecej kilku wskazanych przez ciebie tabelach, popraw tak

select historia.pokoj, extract(day from historia.do-historia.od)*cena from historia,pokoje where nazwisko='Kowalski' and pokoje.pokoj=historia.pokoj;