Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Aktualny status książki
Bartess
post 4.11.2019, 17:17:20
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.01.2016

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


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?
Go to the top of the page
+Quote Post
nospor
post 4.11.2019, 17:32:31
Post #2





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Bartess
post 4.11.2019, 17:40:23
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.01.2016

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


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?
Go to the top of the page
+Quote Post
viking
post 4.11.2019, 17:57:15
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Ale w każdej chwili możesz zrobić sobie widok z kolumnami które potrzebujesz.


--------------------
Go to the top of the page
+Quote Post
trueblue
post 4.11.2019, 18:13:25
Post #5





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


  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;


--------------------
Go to the top of the page
+Quote Post
Bartess
post 4.11.2019, 20:34:26
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.01.2016

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


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;?
Go to the top of the page
+Quote Post
trueblue
post 4.11.2019, 21:43:41
Post #7





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


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.*

Ten post edytował trueblue 4.11.2019, 22:10:07


--------------------
Go to the top of the page
+Quote Post

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: 29.03.2024 - 06:20