Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Numeracja miesięczna dokumentów
Forum PHP.pl > Forum > Przedszkole
sci201
Witam
Mam taki problemik. musze stworzyć autonumeracje miesięczna dokumentów w formacie nr/mm/yyyy. Na myśl jedynie mi przychodzi takie rozwiązanie czesc mm/yyyy wyciagnać z funkcji date a "nr" na zasadzie zwrocenia ilości rekordów poprzez zapytanie do bazy o ilość wpisów z parametrem between
  1. SELECT `numer` FROM `dokumenty` WHERE `data_dok` BETWEEN '2012-09-01' AND '2012-09-30'
i dodanie do niej wartości +1. Czy ktoś może miał podobny problem ? lub proponuje jakieś inne rozwiązanie ?
peter13135
Przeczytałem 4 razy i chyba załapałem o co tu chodzi, ale wolę się upewnić.

Czy tu chodzi o to, żeby przy dodawaniu rekordu, dodawał się kolejny numer według takiej reguły:

Jest luty, "ktoś" dodaje pierwszy rekord w tym miesiącu i jego "kod" ma wtedy taką wartość : 1/02/2012
Następny rekord w tym miesciącu ma mieć wartość 2/02/2012
Trzeci rekord będzie miał wartość 3/02/2012
Nastaje następny miesiąc (marzec) i następny dodany rekord ma mieć kod
1/03/2012

Jeśli dobrze Cię zrozumiałem, to możesz to wyciągnąć za pomoca jednego zapytania.

Po pierwsze, zamiast używać between możesz użyć funkcji mysqlowych. Nie będziesz musiał wtedy do zapytania wklejać dat.

To zaptranie, zwróci aktualny miesiąc.
  1. SELECT MONTH( NOW( ) )


To zapytanie zwróci aktualny rok
  1. SELECT YEAR( NOW( ) )


Możesz więc zrobić takie zapytanie (ono będzie robić to samo, co Twoje zapytanie, które podałeś) :

  1. SELECT `numer` FROM `dokumenty` WHERE MONTH(`data_dok`) = MONTH( NOW( ) ) AND YEAR(`data_dok`) = YEAR( NOW( ) )

Oczywiście, kolumna data_dok musi mieć typ datetime lub date.

ilość rekordów możesz pobrać za pomocą funkcji count(). Skoro chcesz otrzymać liczbę o jeden większą, to robisz tak :
  1. SELECT count(`id`)+1 FROM `dokumenty` WHERE MONTH(`data_dok`) = MONTH( NOW( ) ) AND YEAR(`data_dok`) = YEAR( NOW( ) )


teraz datę w formacie dd/yyyy możesz uzyskać choćby tak :
  1. SELECT count(`id`)+1 AS numer , CONCAT(MONTH( NOW( ) ), '/' , YEAR( NOW( ) ) ) AS date FROM `dokumenty` WHERE MONTH(`data_dok`) = MONTH( NOW( ) ) AND YEAR(`data_dok`) = YEAR( NOW( ) )

A żeby zwrócić "kod" nr/mm/yyyy w formacie jednego pola robisz tak :

  1. SELECT CONCAT(count(`id`)+1, '/', MONTH( NOW( ) ), '/' , YEAR( NOW( ) ) ) AS kod FROM `dokumenty` WHERE MONTH(`data_dok`) = MONTH( NOW( ) ) AND YEAR(`data_dok`) = YEAR( NOW( ) )
ZenekN
chciałem bardzo podziękować użytkownikowi @peter13135, naprawdę bardzo mi pomogłeś smile.gif
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.