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.
SELECT MONTH( NOW( ) )
To zapytanie zwróci aktualny rok
SELECT YEAR( NOW( ) )
Możesz więc zrobić takie zapytanie (ono będzie robić to samo, co Twoje zapytanie, które podałeś) :
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 :
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 :
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 :
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( ) )