Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
mihmih
witam,

mam pytanie, możliwe że głupie, ale zawsze warto pytaćsmile.gif

Czy jest możliwe posortowanie wierszy w zapytaniu wg czasu jak długo one sa już w tym zapytaniu? Albo do zapytania dodać kolumnę typu DATA ktora określa czas kiedy dany wiersz "wskoczył" do zapytania"?

Nie wiem czy jest to jasne, chodzi o magazyn części. Jest kolumna ilość, która cały czas się zmienia. Raz stan rośnie, raz maleje, gdy spadnie poniżej pewnej wartości stanu alarmowego trafia na listę rzeczy do zamówienia. I na tej liście do zamówienia chciałbym mieć właśnie sortowanie wg elementu, który najdłużej jest już na tej liście.
Pyton_000
Wrzucaj sobie do kolumny datę ost. aktualizacji stanu i po niej sortuj
mihmih
to nie pomoże. Bo element nr 1 trafia na listę do zamówienia jak ilość spadnie poniżej 10 sztuk. Jest 9 i trafia na listę. Jest na 1 pozycji. Ale za tydzień stan wynosi już tylko 7, i mimo że sa nowsze pozycje na liście, to znowu ten element wędrowałby na 1 pozycje po aktualizacji stanu...
Pyton_000
No to ustawiaj tą datę jak spadnie poniżej zadanego progu.
trueblue
Skoro liczba wynosi 7, to w ogóle nie wyświetlasz go na liście do zamówienia.
Aktualizować datę możesz więc zawsze, ale wyświetlać tylko te o liczbie <=10, według właśnie tej daty.
mihmih
postaram się to bardziej dokładnie wyjaśnić...

jest tabela z elementami, do każdego z nich jest przypisany stan alarmowy.
jest tabela z dostawami (kolumny: ilosc, id_elementu)
jest tabela z pobraniem z magazynu (kolumny: ilosc, id_elementu)

mamy kwerende stanów magazynowych:

id_elementu
stan aktualny (suma dostaw - suma pobrań)

mamy kwerende stanów alarmowych (...where stan aktualny < stan alarmowy)

i chciałbym aby element nr 1 po wskoczeniu na kwerende stanów alarmowych zajmował 1 pozycję. Później element 2 pojawia sie na tej liście, więc element 1 spada na 2 pozycję. Pózniej jest dostawa elementu 1 i wypada on z listy alarmowej. Ale znowu stan spada poniżej stanu alarmowego i w tym momencie znowu widzimy element 1 na szczycie listy dopóki jakiś inny element nie wskoczy znowu na ta listę.

Czy takie sortowanie jest możliwe? Bo nie mam pojęcia jak określić tą datę wg której miałbym to sortować, tymbardziej że kwerenda jest dynamiczna i co chwile wszystko się w niej zmienia...
trueblue
Rozwiązanie podał Ci Pyton_000 + warunek, który Ci podałem.
Dodajesz w tabeli elementów pole z datą aktualizacji stanu alarmowego.

Element nr 1 spada poniżej 10 w: 2016-06-11 11:00
Lista wygląda tak:
Element nr 1 2016-06-11 11:00

Element nr 2 spada poniżej 7 w: 2016-06-11 11:10
Póki co najdłużej jest element nr 1, więc lista wygląda:
Element nr 2 2016-06-11 11:10
Element nr 1 2016-06-11 11:00

Dostawa elementu nr 1. Nie aktualizujesz daty stanu alarmowego, ale nie wyświetlasz tego elementu na liście alarmowej (data więc nie interesuje Cię).
Na liście pozostaje tylko element nr 2.
Lista:
Element nr 2 2016-06-11 11:10

Znów jest pobranie elementu nr 1 i jego stan spada poniżej 8 w: 2016-06-11 11:20 (aktualizujesz datę stanu alarmowego).
Lista wygląda tak:
Element nr 1 2016-06-11 11:20
Element nr 2 2016-06-11 11:10
mihmih
ale jak przypisać datę pojawienia się rekordu w zapytaniu? niestety nie mam takiej wiedzy. Wiem jedynie jak można w tabeli ustawić datę stworzenia rekordu (ADD COLUMN createdtime DATETIME NULL DEFAULT CURRENT_TIMESTAMP)

Jeśli ktoś by mi powiedział jak to zrobić w zapytaniu byłbym wdzięczny.

trueblue
W zapytaniu wyświetlającym listę stanów alarmowych nie aktualizujesz tej daty.

Powinno to być odrębne zapytanie aktualizujące tabelę elementów, kiedy ilość spada poniżej stanu alarmowego.
Albo powinno to być zrobione w aplikacji, albo jako trigger w tabeli pobrań.

Gdybyś miał pobrania i dostawy w jednej tabeli, to jeszcze można kombinować z id dotyczącego zmiany stanu, zamiast daty.
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.