![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Witam,
mam pewien problem, nie bardzo wiem jak ugryźć taką rzecz. Mam tabele w bazie danych: szkolenie [id, nazwa, liczba_miejsc...] zapis [id, szkolenie_id, zaplacone...] zapis_osoba [id, zapis_id, imie, nazwisko] Generalnie idea jest taka, że dodawane są szkolenia, które mają określoną liczbę miejsc (z pewną, nieokreśloną, tolerancją +/-). Użytkownicy mogą zapisywać się na takie szkolenia; jeden użytkownik może zapisać kilka osób "za jednym zamachem". Jeżeli użytkownik zapisze się w momencie gdy przekroczona zostanie liczba miejsc to ląduje on na liście rezerwowej. Aby to zobrazować: dodajemy szkolenie dla liczba_miejsc = 3. Użytkownik user_1 zapsiuje Jasia i Krysię, user_2 zapisuje Zdzisia i Henia, user_3 zapisuje Mariolę i Grzesia. Jak widać łącznie zapisano 6 osób, a miejsc wolnych jest 5 (+ tolerancja). W wyniku tego zapisy user_1 i user_2 lądują jako "właściwie", natomiast zapisy user_3 są na liście rezerwowej. Pytanie: W jaki sposób mogę stworzyć zapytanie (aby zrobić z niego widok), które do tabeli "zapis" dołoży mi kolumnę 0/1 dla 1=zapis właściwy oraz 0=lista rezerwowa? Jedyne rozwiązanie jakie mi się nasuwa to bazowanie na numerowaniu wierszy by ~nospor. Należałoby pobrać dane posortowane po szkolenie_id i na bieżąco dodawać liczby osób w danym zapisie i gdy liczba ta będzie nagle większa od liczby dostępnych miejsc to wstawiać 0 (wcześniej wstawiając 1). W momencie zmiany wartości szkolenie_id należałoby zerować wartość licznika. Wydaje mi się to trochę zamotane i szczerze mówiąc nie wiem czy to ogarnę (+ dodatkowe tabele i warunki) więc prosiłbym o pomoc w tej kwestii. Z góry bardzo dziękuję, pion |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat W jaki sposób mogę stworzyć zapytanie (aby zrobić z niego widok), które do tabeli "zapis" dołoży mi kolumnę 0/1 dla 1=zapis właściwy oraz 0=lista rezerwowa? phpMyAdminem nie dasz rady? [; Cytat Jedyne rozwiązanie jakie mi się nasuwa to bazowanie na numerowaniu wierszy by ~nospor. Należałoby pobrać dane posortowane po szkolenie_id i na bieżąco dodawać liczby osób w danym zapisie i gdy liczba ta będzie nagle większa od liczby dostępnych miejsc to wstawiać 0 (wcześniej wstawiając 1) Też tak można. [; Albo po prostu
(liczba miejsc; domyślnie -> 0) Cytat Wydaje mi się to trochę zamotane i szczerze mówiąc nie wiem czy to ogarnę (+ dodatkowe tabele i warunki) więc prosiłbym o pomoc w tej kwestii. A na co dodatkowe tabele? ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
@erix: Z całym szacunkiem ale wybacz - Twój post jest kompletnie nie na temat. phpMyAdminem nie dasz rady? [; Masz na myśli fizyczne dodanie takiej kolumny? Jeżeli tak to nie o to mi chodzi. [quote name='erix' post='638109' date='21.07.2009, 22:29:14 ']Albo po prostu
BEGIN DECLARE r ENUM('t','f'); SELECT IF (( SELECT COUNT(*) FROM `order_participant` JOIN `order` ON `order_participant`.`order_id` = `order`.`id` WHERE `order`.`training_id` = _training_id AND `order`.`id` < _order_id -- zamowienia zlozone pozniej ) < _vacant_amount, 't', 'f') INTO r; RETURN r; END DELIMITER ; [/list] BEGIN DECLARE r ENUM('t','f'); SELECT IF (( SELECT COUNT(*) FROM `order_participant` JOIN `order` ON `order_participant`.`order_id` = `order`.`id` WHERE `order`.`training_id` = _training_id AND `order`.`id` < _order_id -- zamowienia zlozone pozniej ) < _vacant_amount, 't', 'f') INTO r; RETURN r; END DELIMITER ; [/list] |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 781 Pomógł: 256 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat W jaki sposób mogę stworzyć zapytanie (aby zrobić z niego widok), które do tabeli "zapis" dołoży mi kolumnę 0/1 dla 1=zapis właściwy oraz 0=lista rezerwowa? Możesz użyć. NAME_CONST() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 04:18 |