Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z niby banalnym zapytaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
thudy
Witam szanownych forumowiczów!

Mam następujący problem z którym walczę od rana i uporać się nie mogę. Od razu zaznaczę że jestem raczkujący w temacie bazy MySQL i PHP, ale postanowiłem sobie ułatwić (albo utrudnić) pracę i stworzyć małą bazę magazynową. Moja główna tabela wygląda następująco:
|id|ident|magazyn|
W pierwszej kolumnie wiadomo mam "id" AI, w kolejnej "ident" jest to identyfikator produktu, natomiast w kolumnie "magazyn" znajduje się informacja w którym magazynie znajduje się produkt.
Oczywiście kolumn jest więcej, ale te uznałem za najważniejsze.
I teraz tak, moja koncepcja była taka aby za każdym razem gdy produkt przemieszcza się z jednego magazynu do drugiego, z drugiego do pierwszego, do trzeciego itd. był dodawany kolejny rekord, aby można było później łatwo odtworzyć drogę jaką przebył produkt i pojawia się pytanie: w jaki sposób wyświetlić które produkty AKTUALNIE znajdują się w pierwszym magazynie, jakie w drugim, a jakie w trzecim questionmark.gif
Myślę od rana i już mnie głowa boli i zastanawiam się czy moja koncepcja nie jest do bani

Z góry dziękuję za pomoc
daniel1302
  1. SELECT * FROM produkty ORDER BY id DESC GROUP BY ident

to pobierze rekordy i pogrupuje je wg ostatnie.
Ajeśli pojednyczy chcesz pobrać to:
  1. SELECT * FROM produkty ORDER BY id DESC LIMIT 1


Albo możesz dodać pole current char(1) i 2 wartości ma 0 lub 1 jeśli 1 to jest aktualnie w tym magazynie
i przy przenosinach wszystkie magazyny ustalasz na 0 i nowy rekord ma DEFAULT 1
thudy
Pierwsze polecenie nie działa, wywala mi błąd:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY `ident` LIMIT 0, 30' at line 3
drugie natomiast wyświetla mi jedynie produkty które nie zmieniły magazynu
Zastanawiam się właśnie czy nie będzie konieczne dodatkowe pole
mmmmmmm
Ten Error spowodowany jest złą kolejnością fragmentów GROUP BY i ORDER BY. zamień je, a zadziała.
A twój problem rozwiązuje zapytanie:
  1. SELECT p.* FROM produkty p JOIN (SELECT ident, Max(id) id FROM produkty GROUP BY ident) x ON x.ident=p.ident AND x.id=p.id
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-2024 Invision Power Services, Inc.