Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Rezerwacje online
EliaS
post 13.05.2004, 23:34:14
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.05.2003
Skąd: Kołobrzeg

Ostrzeżenie: (0%)
-----


Witam
No i mam kolejny problem:(
otoż robie wlasnie system rezerwacji biletow autokarowych. Wszystko jest na bazach mysql struktura bazy wyglada nastepujaco:

id | stacja1 | miejsca1 | stacja2 | miejsca2 | stacja3 | miejsca3 | stacja4 | miejsca4 | stacja5 |miejsca5

No i tutaj pojawia sie problem typu rezerwacji miejsc.Otoz jak wiadomo ktos moze zarezerwowac miejsce np. na trasie stacja1 - stacja4. Na kazda stacje przypada okreslona ilosc miejsc,wiec niezabardzo wiem jak zrobic taki system ktory automatycznie odejmowal by dana ilosc miejsc ale na odcinku wybranym przez rezerwujacego, tak by jezeli zarezerwuje podroz ze stacji 2 do stacji 4 to by miejsca odjelo na calym odcinku czyli rowniez na stacji3. Myslalem cos o wewnetrznych wskaznikach w bazach ale nie zabardzo wiem jak to sie je:(

Nie wiem czy wyrazilem sie jasno ale licze na pomoc.
Go to the top of the page
+Quote Post
Zbłąkany
post 13.05.2004, 23:42:42
Post #2


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

Ostrzeżenie: (0%)
-----


Moglbys przy wyslaniu rezerwacji pobrac pola z miejscami na danej trasie i odjac od kazdej wartosci ilosc zarezerwowanych miejsc i zapisac ponownie do bazy wg mnie to by bylo najlepsze rozwiazanie smile.gif


--------------------
Środowisko: Gentoo 2008.0 | Apache | PHP5 | PostgreSQL | MySQL | Postfix
Workstation: Gentoo 2008.0 | Firefox
Thomas Alva Edison: "Aby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu ..."
Odpowiedź na każde pytanie typu "Jak ...": "Nie da się, to nie PostgreSQL"
Go to the top of the page
+Quote Post
EliaS
post 13.05.2004, 23:54:51
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.05.2003
Skąd: Kołobrzeg

Ostrzeżenie: (0%)
-----


no wlasnie o to chodzi ze aby pobrac z trasy stacja2-stacja4 ilosc miejsc to musze zrobic cos takiego zeby automatycznie pobieral badz od razu zmienial ilosci miejsc ale na calym odcinku w zaleznosci jakie stacjie wybierze. Mozna to zrobic na instrukcjach ale to mozna by sie zajechac przy wiekszej ilosci stacji. Potrzebuje zrobic cos takiego by skrypt sam rozpoznawal ze miedzy stacja2 a stacja4 jest jeszcze stacja3 badz inne.
Go to the top of the page
+Quote Post
cboot
post 14.05.2004, 00:58:42
Post #4





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 2.02.2004

Ostrzeżenie: (0%)
-----


1. Czy zamierzasz to z czymś łączyć? A konkretnie, czy będziesz to łączył z php? Bo jeśli tak, to sprawa przedstawia się łatwiej. Lepiej zrealizować te funkcje w php.
2. Co to dokładnie jest za tabela, co przechowywane jest w poszczególnych polach? Bo jeśli wiersze to mają być kolejne rezerwacje, kolumna stacja1 ma przechowywać nazwę stacji, a kolumna miejsca1 ma przechowywać liczbę zarezerwowanych przez danego klienta miejsc na danej stacji, to tablica jest źle zrobiona (w takim wypadku we wszystkich polach kolumny stacja1 będzie przecież ta sama nazwa) i trzeba ją znormalizować, a tak prościej mówiąc, to umieścić te nazwy stacji w oddzielnej tabeli.

Ale napisz konkretnie co chcesz przechowywać i do jakich rzeczy ma służyć ta tabela, czyli co ma dać się w niej obliczyć. Wtedy będziemy mogli podyskutować dalej.
Go to the top of the page
+Quote Post
EliaS
post 14.05.2004, 01:31:06
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.05.2003
Skąd: Kołobrzeg

Ostrzeżenie: (0%)
-----


a więc juz tlumacze
1. Tak, oczywiscie wszystko robie w php.
2. Tabela ta przedstawia dany kurs autobusu oraz miejsca jakie sa dostepne na poszczegolnych stacjach. z tej tabeli sa wyciagane informacje na strone o danym kursie i kiedy klient rezerwuje miejsce to na danym odcinku musza te miejsca zniknac(liczba wolnych miejsc sie zmniejsza). Tak wiec pola stacja sa poprostu nazwami poszczegolnych przystankow danego kursu natomiast w polach miejsca przechowywana jest ilosc miejsc jaka jest wolna na danym przystanku. Tak wiec bol polega na tym aby jesli ktos zaznaczy w formularzu ze chce jechac ze stacji1 do stacji3 to aby caly ten odcinek czyli rowniez na stacji2 odjelo w polach miejsca1,2,3 wolne miejsce.
Go to the top of the page
+Quote Post
cboot
post 14.05.2004, 02:53:56
Post #6





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 2.02.2004

Ostrzeżenie: (0%)
-----


A więc w takim wypadku Twoja tabela miałaby tylko jeden długi wiersz, co jest chyba niezbyt szczęśliwym rozwiązaniem :wink:
Moim zdaniem najlepiej jest zrobić to tak:

id | nazwa_stacji | wolne_miejsca | numer_stacji

[sql:1:309d2c7a0b]CREATE TABLE stacje (
id TINYINT(5) AUTO_INCREMENT DEFAULT '0' NOT NULL,
nazwa VARCHAR(20) NOT NULL,
wolne_miejsca SMALLINT(5) NOT NULL,
numer_stacji TINYINT(5) NOT NULL,
PRIMARY KEY ( `id` )
)[/sql:1:309d2c7a0b]

Przy czym id byłoby oczywiście kluczem z auto_increment. Pole numer stacji jest niby niepotrzebne, bo na pierwszy rzut oka to to samo, co id, ale jest potrzebne, jeśli kiedyś zajdzie potrzeba np. wstawienia dodatkowej stacji gdzieś w środek, itd. Możemy więc, używać pola numer_stacji do ustalania kolejności poszczególnych stacji. Pola id nie zmieniamy sami i pozostawiamy je jako klucz po prostu.

W takim wypadku odjęcie wolnych miejsc przy rezerwacji, wyglądałoby następująco:
[sql:1:309d2c7a0b]UPDATE stacje SET wolne_miejsca = wolne_miejsca - $ilosc_rezerwowanych_miejsc WHERE numer_stacji BETWEEN $stacja_poczatkowa AND $stacja_koncowa[/sql:1:309d2c7a0b]
Gdzie zmienne $ilosc_rezerwowanych_miejsc, $stacja_poczatkowa i $stacja_koncowa pochodziłby ze skryptu php oczywiście (te dwie ostatnie to numery stacji, a nie ich nazwy oczywiście smile.gif ).
Go to the top of the page
+Quote Post
EliaS
post 14.05.2004, 11:12:16
Post #7





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.05.2003
Skąd: Kołobrzeg

Ostrzeżenie: (0%)
-----


Czyli z tego co zrozumialem proponujesz zrobienie na dany kurs osobna tabele? bo jesli nie trzymac danych o przystankach w wierszach to czyli w kolumnach? Moze i jest to tez koncepcja... trzeba sprawdzic smile.gif
Go to the top of the page
+Quote Post
cboot
post 14.05.2004, 22:48:52
Post #8





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 2.02.2004

Ostrzeżenie: (0%)
-----


Na każdy kurs osobną tabelę to nie. To byłoby raczej skopane. Wystarczy dodać dodatkowe pole:

id | nazwa_stacji | wolne_miejsca | numer_stacji | numer_kursu

I wtedy zapytanie będzie wyglądać tak:

[sql:1:531b68f713]UPDATE stacje SET wolne_miejsca = wolne_miejsca - $ilosc_rezerwowanych_miejsc WHERE numer_kursu = $numer_kursu AND numer_stacji BETWEEN $stacja_poczatkowa AND $stacja_koncowa[/sql:1:531b68f713]
Go to the top of the page
+Quote Post
EliaS
post 18.05.2004, 14:54:31
Post #9





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.05.2003
Skąd: Kołobrzeg

Ostrzeżenie: (0%)
-----


No faktycznie podaleś lepsze rozwiązanie tylko jeszcze jedna kwestia mi sie nasuwa. Otóż dany kurs jezdzi co 22 godziny wyłączając godziny od 0.00 do 5.00 i teraz czy na kazda godzine musze miec osobny numer kursu? Chodzi o to zeby na danym kursie rezerwowalo wybrane miejsce, bo ktos moze rezerwowac na dzisiaj a inny kurs za tydzień. Wiec dana trasa nie bedzie sie zmieniac i mozna faktycznie trzymac dane odnosnie trasy w jednej tabeli, ale jak rezerwowac na tej samej trasie tylko kurs o innym czasie?
Go to the top of the page
+Quote Post
cboot
post 20.05.2004, 01:05:04
Post #10





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 2.02.2004

Ostrzeżenie: (0%)
-----


No to tak na przykład:
Cytat
id | nazwa_stacji

Nazwy stacji wywalamy do odzielnej tabeli.
Cytat
id | id_stacji | numer_porzadkowy_stacji | numer_trasy

Tutaj przechowujemy trasy kursów, które są stałe. numer_porzadkowy_stacji odpowiada za kolejność stacji na danej trasie (mówi, która to jest stacja na danej trasie).
Cytat
id | id_stacji | id_trasy | czas_kursu | wolne_miejsca

Tutaj już przechowujemy rezerwacje na konkretnych kursach (ruszających o danej godzinie, czy danego dnia) na danej trasie.

Teraz jeśli chcemy wprowadzić rezerwację na danym kursie (o konkretnej godzinie początkowej) od stacji A do stacji B, to musimy najpierw wczytać z tabeli trasy id wszystkich stacji, które będzie trzeba updatować:
[sql:1:3b5dcb4ae3]select id_stacji from trasy where numer_trasy = $trasa AND numer_porzadkowy_stacji BETWEEN $stacja_poczatkowa AND $stacja_koncowa[/sql:1:3b5dcb4ae3]
I następnie w jakiejś pętli dla każdego id_stacji z wyniku tego zapytania zrobić update w tabeli rezerwacje:
[sql:1:3b5dcb4ae3]update rezerwacje set wolne_miejsca = wolne_miejsca - $liczba_rezerwowanych_miejsc where id_stacji = $id_stacji and numer_trasy = $trasa and czas_kursu = $czas[/sql:1:3b5dcb4ae3]


--------------------
Na warsztacie (z zamiłowania): Nowy rynek kosztowności, broni, ziół i misktur na Vallheru (MMORPG) lllllllllllll 65%
[b]Na warsztacie (komercyjnie):
Rozbudowa i adaptacja do wymagań klienta gotowego Progra
Go to the top of the page
+Quote Post
DeyV
post 20.05.2004, 09:34:18
Post #11





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




dzięki takiemu zapisowi w bazie bardzo łątwo również sprawdzić, czy na danym odcinku jest jeszcze wystarczająca ilośc wolnych miejsc.
[sql:1:5988957ee0]SELECT MIN( wolne_miejsca )
FROM trasy
WHERE numer_trasy = $trasa AND numer_porzadkowy_stacji BETWEEN $stacja_poczatkowa AND $stacja_koncowa[/sql:1:5988957ee0]

Jeśli więc okaże się, że wynik będzie mniejszy niż ilość miejsc które własnie chcemy sprzedać, to znaczy, że przynajmniej na jednym z wycinków danej trasy pasażerowie musieli by sobie siedzieć na kolanach winksmiley.jpg


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
EliaS
post 20.05.2004, 12:43:38
Post #12





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.05.2003
Skąd: Kołobrzeg

Ostrzeżenie: (0%)
-----


No i właśnie o to chodzi ze kazdy odcinek musi miec swoja liczbe miejsc, a nie tylko zdejmowalo rezerwacje na calym odcinku.
Go to the top of the page
+Quote Post
EliaS
post 27.05.2004, 11:30:07
Post #13





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.05.2003
Skąd: Kołobrzeg

Ostrzeżenie: (0%)
-----


Robie tak jak podpowiedziales mi cboot ale znow mam problem z ustaleniem $numer_poczatkowy i koncowy.Żeby ustalic te dwie zmienne musze je wyciagnac z petli wykonujacej zapytanie sql. Kod wyglada tak:
[php:1:c1e0ef24f8]<?php
$city = "SELECT * FROM miejscowosci WHERE miejscowosc='$odjazd' || miejscowosc='$przyjazd'";
$do = mysql_query($city, $conn);
while ($result = @mysql_fetch_array($do))
{
$check = "SELECT * FROM trasy WHERE id_miejscowosci=$result[id] AND id_trasy='$trasa' ";
$do1 = mysql_query($check, $conn);
while ($result1 = @mysql_fetch_array($do1))
#z tego zapytania moge wyciagnac $result1[nr_porzadkowy]

?>[/php:1:c1e0ef24f8]

Ale jak te dwa wyniki tego zapytania przypisac do zmiennej $stacja poczatkowa oraz $stacja_koncowa? Bo te zmienne beda mi pottrzebne skolei do okreslenia calego odcinka BEtWEEN tymi stacjami smile.gif Pewnie to jest prosty problem ale cos mam przycmienie a swoja droga w php daawnoo juz nie robilem sad.gif
Go to the top of the page
+Quote Post
cboot
post 27.05.2004, 23:01:20
Post #14





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 2.02.2004

Ostrzeżenie: (0%)
-----


A jak w tej Twojej tabeli są zaznaczane te stacje? miejscowosc = $odjazd to $stacja_poczatkowa, a miejscowosc = $przyjazd to $stacja_koncowa questionmark.gif Opisuj to jakoś bardziej zrozumiale, bo jak zwykle nic nie rozumiem... tongue.gif


--------------------
Na warsztacie (z zamiłowania): Nowy rynek kosztowności, broni, ziół i misktur na Vallheru (MMORPG) lllllllllllll 65%
[b]Na warsztacie (komercyjnie):
Rozbudowa i adaptacja do wymagań klienta gotowego Progra
Go to the top of the page
+Quote Post
EliaS
post 27.05.2004, 23:46:16
Post #15





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.05.2003
Skąd: Kołobrzeg

Ostrzeżenie: (0%)
-----


wiec najpierw z tabeli miejscowosci wyciagam id tychze miejscowosci $odjazd to miejscowosc poczatkowa a $przyjazd to koncowa. Teraz z uzyskanego id zaznaczam dany odcinek w tabeli trasy na konkretnym kursie w sposob jak podalem w kodzie. Ale teraz zeby zaznaczyc caly odcinek miedzy stacja poczatkowa a koncowa musze chyba wyciagnac do dwoch zmiennych numery porzadkowe (numer poczatkowy i koncowy) ktore mam w osobnej kolumnie nr_porzadkowe i dopiero wtedy zaznaczyc w kolejnej tabeli rezerwacje dany caly odcinek pomiedzy tymi stacjami.
uufff kurde nawet nie wiecie jak czasem ciezko jest przekazac o co chodzi:) ale dzieki z gory za czas i pomoc.
Go to the top of the page
+Quote Post
cboot
post 28.05.2004, 00:01:24
Post #16





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 2.02.2004

Ostrzeżenie: (0%)
-----


[php:1:b3a4b94d4b]<?php
$city = "SELECT * FROM miejscowosci WHERE miejscowosc='$odjazd' || miejscowosc='$przyjazd'";
$do = mysql_query($city, $conn);
while ($result = @mysql_fetch_array($do))
{
$check = "SELECT * FROM trasy WHERE id_miejscowosci=$result[id] AND id_trasy='$trasa' ORDER BY nr_porzadkowy";
// ORDER po to, zeby nie trzeba bylo zgadywac, ktora jest ktora - tylko, zeby miec od razu w kolejnosci: stacja_poczatkowa, stacja_koncowa
$do1 = mysql_query($check, $conn);
$result1 = @mysql_fetch_array($do1);
$stacja_poczatkowa = $result1['nr_porzadkowy'];
$result1 = @mysql_fetch_array($do1);
$stacja_koncowa = $result1['nr_porzadkowy'];
?>[/php:1:b3a4b94d4b]


--------------------
Na warsztacie (z zamiłowania): Nowy rynek kosztowności, broni, ziół i misktur na Vallheru (MMORPG) lllllllllllll 65%
[b]Na warsztacie (komercyjnie):
Rozbudowa i adaptacja do wymagań klienta gotowego Progra
Go to the top of the page
+Quote Post
EliaS
post 1.06.2004, 21:20:30
Post #17





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.05.2003
Skąd: Kołobrzeg

Ostrzeżenie: (0%)
-----


Mam taki kod ktory mi pomagales:
[php:1:b7024db5ce]<?php
$city = "SELECT * FROM miejscowosci WHERE miejscowosc='$odjazd' || miejscowosc='$przyjazd'";
$do = mysql_query($city, $conn);
while ($result = @mysql_fetch_array($do))
{
$check = "SELECT * FROM trasy WHERE id_miejscowosci=$result[id] AND id_trasy='$trasa' ORDER BY nr_porzadkowy";

$do1 = mysql_query($check, $conn);
$result1 = @mysql_fetch_array($do1);

$stacja_poczatkowa = $result1[nr_porzadkowy];

$result2 = @mysql_fetch_array($do1);

$stacja_koncowa = $result2[nr_porzadkowy];

$select2 = "SELECT * FROM trasy WHERE id_trasy='$trasa' AND nr_porzadkowy BETWEEN '$stacja_poczatkowa' AND '$stacja_koncowa' ";
$do2 = mysql_query($select2, $conn);
while ($result3 = mysql_fetch_array($do2, $conn))
{
echo ("$result3[id_miejscowosci]");
$upd = "UPDATE rezerwacje SET miejsca = '$osoby' WHERE id_miejscowosci='$result3[id_miejscowosci]' AND data='$data'";
myslq_query($upd, $conn);
}
echo $stacja_poczatkowa;
echo $stacja_koncowa;
}

?>[/php:1:b7024db5ce]

Ale nie wykonuje mi tej ostatniej petli, a skolei calkowicie poza petla while wyciaga mi tylko jedna zmienna $stacja_koncowa wiec nie moge poza pierwsza petla wykonac tej ostatniej:(
Go to the top of the page
+Quote Post
EliaS
post 2.06.2004, 16:38:59
Post #18





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 6.05.2003
Skąd: Kołobrzeg

Ostrzeżenie: (0%)
-----


Nie wiem dlaczego nie wykonuje mi wogole zapytania z waunkiem WHERE i BETWEEN
[php:1:ec6cf692a6]<?php
$select2 = "SELECT id_miejscowosci FROM trasy WHERE id_trasy='$trasa' AND nr_porzadkowy BETWEEN '$stacja_poczatkowa' AND '$stacja_koncowa' ";

?>[/php:1:ec6cf692a6]

Jeśli usunę warunek BETWEEN to wykona mi petle z warunkiem WHERE id_trasy=$trasa, jesli usune wogole warunek dotyczacy id_trasy i wstawiam tylko BETWEEN to nic nie mam w wyniku. sad.gif
Go to the top of the page
+Quote Post
party
post 2.06.2004, 17:01:34
Post #19





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 19.08.2003
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Było już tyle razy dukane, że wartości liczbowych w MySQL nie można obejmować apostrofami...


--------------------
Go to the top of the page
+Quote Post
DeyV
post 2.06.2004, 18:40:20
Post #20





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Nie można? A to ciekawe. Dlaczego to niby?


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 19:09