Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwanie MAX
Forum PHP.pl > Forum > Bazy danych > MySQL
Plebanov
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
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
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
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
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
również proponowałbym przeprojektować bazę ale jeśli już musisz to poczytaj tu Temat: Wyrazenie regularne
Plebanov
Faktycznie chyba lepiej będzie jak przeprojektuję bazę. Ale dzięki za chęci smile.gif
Majcon
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
tylko że to nie jest po stronie bazy
Plebanov
Coś takiego wczoraj zrobiłem i odziwo działa smile.gif

  1. $rok = date(Y);
  2. $query1 = "SELECT MAX(nr_zam) AS max_numer FROM sprzedaz WHERE nr_zam LIKE '%".$rok."' LIMIT 1";
  3. $result1 = @mysql_query($query1);
  4. $row1 = mysql_fetch_array($result1, MYSQL_ASSOC);
  5.  
  6. $t_array = explode("/",$row1[max_numer]);
  7. $row2 = ($t_array[1]+1);
  8. $numer_max = str_pad($row2, 6, 0, STR_PAD_LEFT);
  9. $nr_zam = 'ZAM/'.$numer_max.'/'.$rok;


Dopiero dziś zauważyłem Twój post Majcon smile.gif ale dzięki za pomoc smile.gif
Majcon
He no wsumie to nmzc biggrin.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.