Plebanov
10.12.2012, 22:37:08
Witam,
mam w bazie kolumnę nr_zam, gdzie znajduje się numer zamówienia w formacie ZAM/000001/2012. Chciałbym, aby dodając nowe zamówienie skrypt pobierał z bazy ostatni użyty numer i zapisał o 1 numer wyższy (ZAM/000002/2012). Żeby było zabawniej muszę zrobić tak, by w 2013 roku numeracja wystartowała od 1 czyli ZAM/000001/2013.
Pytanie moje i zarazem prośba brzmi: jak napisać zapytanie, które wyświetli mi największy (MAX) numer zamówienia z kolumny nr_zam w danym roku?
Damonsson
10.12.2012, 22:53:56
Hmmm jeśli mogę coś podpowiedzieć, to jeśli jeszcze możesz to przeprojektowałbym bazę danych i rozdzielił: ZAM | 0000001 | 2013 do oddzielnych kolumn.
jcies
10.12.2012, 23:30:18
Pierwsza czesc zadania jest dosc prosta.
$data = mysql_query("SELECT nr_zam FROM tabela ORDER BY nr_zam DESC LIMIT 1 "); // to wyswietli Tobie ostatnia pozycje w tabeli (MAX)
while($result = mysql_fetch_array( $data ))
{
$last = $result['nr_zam'];
$end = ($last + 1);
echo $end;
}
Nie wiem jak z druga czescia. Chyba faktycznie bedzie najlepiej cos rozdzielic jesli chcesz aby w nowym roku rozpoczynalo od nowa...no i zeby pasowalo do pierwszej czesci mojej odpowiedzi.
tvister
11.12.2012, 08:40:48
Pytanie z dziedziny mysqla to proponuje zrobić ta triggerze oraz przy pomocy funkcji substring_index lub substring, która rozbije łańcuch tekstowy.
Dodatkowo pozostaje obsłużyć datę 1 stycznia aby pierwsze zamówienie podbiło rok oraz wyzerowało licznik.
Co do max to może coś takiego (pisze z palca) 'ZAM/000002/2012'
select max(substring(kolumna,4,11)) from tabela where substring(kolumna,13,16) = year();
Nie wiem czy nie obejdzie się bez rzutowania na typ numeryczny.
skowron-line
11.12.2012, 09:41:29
Cytat(Damonsson @ 10.12.2012, 22:53:56 )

Hmmm jeśli mogę coś podpowiedzieć, to jeśli jeszcze możesz to przeprojektowałbym bazę danych i rozdzielił: ZAM | 0000001 | 2013 do oddzielnych kolumn.
"ZAM" wogóle bym z bazy wywalił w przypadku jeżeli nie ma innych prefiksów i zostawił tylko numer i date zamówienia (w pełnym formacie)
sazian
11.12.2012, 20:46:35
również proponowałbym przeprojektować bazę ale jeśli już musisz to poczytaj tu
Temat: Wyrazenie regularne
Plebanov
13.12.2012, 20:18:42
Faktycznie chyba lepiej będzie jak przeprojektuję bazę. Ale dzięki za chęci
Majcon
13.12.2012, 22:41:22
Nie trzeba rozdzielać wystarczy użyć funkcja explode() czyli
pobieramy nr_zam z bazy i
$hm = explode("/", $row['nr_zam'];
następnie wystarczy
$xd = $hm[1] + 1;
$nowe_zamowienie = $hm[0]"/".$xd."/".date(Y);
i mamy nowe zamówienie
dodania do bazy chyba już nie muszę tłumaczyć ? ;p
sazian
14.12.2012, 18:08:30
tylko że to nie jest po stronie bazy
Plebanov
14.12.2012, 22:09:35
Coś takiego wczoraj zrobiłem i odziwo działa

$query1 = "SELECT MAX(nr_zam) AS max_numer FROM sprzedaz WHERE nr_zam LIKE '%".$rok."' LIMIT 1";
$t_array = explode("/",$row1[max_numer
]); $row2 = ($t_array[1]+1);
$numer_max = str_pad($row2, 6
, 0
, STR_PAD_LEFT
); $nr_zam = 'ZAM/'.$numer_max.'/'.$rok;
Dopiero dziś zauważyłem Twój post Majcon

ale dzięki za pomoc
Majcon
14.12.2012, 22:16:54
He no wsumie to nmzc
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.