Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Aktualny status książki
Forum PHP.pl > Forum > Bazy danych > MySQL
Bartess
Cześć.
Mam bardzo prostą bazę książek. Wypożyczenie książki powoduje wpis w tabeli WYPOZYCZENIA indeksu użytkownika, który wypożyczył, timestamp wypożyczenia oraz status wpisany jako 0. Po oddaniu książki jest wpisywany w tabeli WYPOZYCZENIA timestamp oraz status zmieniony na 1.

W jaki sposób „wyciągnąć” tabeli ostatnie statusy książek?
Przykładowo mam:

Kod
| book | user | stan|   time           |
|   1  |   1  |  0  | 2019-11-04 15:31 |
|   2  |   1  |  0  | 2019-11-04 15:32 |
|   3  |   4  |  0  | 2019-11-04 15:33 |
|   1  |   0  |  1  | 2019-11-04 15:37 |
|   1  |   5  |  0  | 2019-11-04 15:39 |
|   3  |   0  |  1  | 2019-11-04 15:39 |



wiersz 1 - książkę nr 1 wypożyczył użytkownik nr 1, co spowodowało wpisanie stanu = 0
w wierszu 4 książka nr 1 została zwrócona co spowodowało dodanie wpisu i ustawienie stanu = 1
w wierszu 5 książka nr 1 znów została wypożyczona, tym razem użytkownikowi nr 5 => zapisany stan = 0

W jaki sposób „wyciągnąć" tylko wypożyczone książki? Czyli wg powyższego przykładu w odpowiedzi na zapytanie powinny pokazać się tylko 2 pozycje:
książka numer 2 wypożyczona użytkownikowi 1 o 2019-11-04 15:32
książka numer 1 wypożyczona użytkownikowi 5 o 2019-11-04 15:39.

Da się to zrobić 1 selectem?
nospor
Powinienies odrozniac stan ksiazki od historii stanu. I zeby to zrobic dodaj poprostu pole STAN do tabeli ksiazki i wowczas zapytanie bedzie banalnie proste. Nie utrudniaj sobie zycia na sile
Bartess
Nospor - gdybym miał tabelę książki, to bym zrobił tak, jak radzisz. Tak naprawdę to nie baza książek, ale dla zjadliwości opisu posłużyłem się przykładem wypożyczania książek.
Dlatego ponowię pytanie - jak to zrobić na tej konkretnej tabeli?
viking
Ale w każdej chwili możesz zrobić sobie widok z kolumnami które potrzebujesz.
trueblue
  1. SELECT k1.*
  2. FROM ksiazka AS k1
  3. LEFT JOIN ksiazka AS k2 ON k1.book = k2.book AND k1.time < k2.time
  4. WHERE k2.book IS NULL AND k1.stan=0;
Bartess
Cytat(trueblue @ 4.11.2019, 18:13:25 ) *
  1. SELECT k1.*
  2. FROM ksiazka AS k1
  3. LEFT JOIN ksiazka AS k2 ON k1.book = k2.book AND k1.time < k2.time
  4. WHERE k2.book IS NULL AND k1.stan=0;

Dzięki!
Wygląda na to, że działa thumbsupsmileyanim.gif.
Tylko nie do końca ogarniam....
Co oznacza w WHERE k2.book IS NULL AND k1.stan=0;?
trueblue
Przyjrzyj się złączeniu, usuń całą klauzulę WHERE i sprawdź wynik po takiej modyfikacji. Będziesz wiedział.

Zapomniałem dodać. Początek taki: SELECT k1.*,k2.*
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.