Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dane skladajace sie z kilku tabel i litery
Forum PHP.pl > Forum > Bazy danych > MySQL
botwinka
Hey od razu mówie że jestem początkująca jeżeli chodzi o php i mysql i natknełam na mały problem z którym borykam się od kilku godzin a mianowicie chcialabym stworzyc tabele na podstawie dwoch innych ALE powinno na poczatku dodawac D pozniej napisac nr dostawy w danym roku podłoge i rocznik, najlepiej pokaze na przykladzie:
ID DATA NR_DOST
1 05-04-2010 -> D1_10
2 02-05-2010 -> D2_10
3 02-05-2011 -> D1_11
4 02-03-2012 -> D1_12
5 02-05-2012 -> D2_12
6 06-05-2012 -> D3_12


nie mam pojęcia jak to zrobić co więcej denerwuje mnie fakt że zapewne jest to takie proste że później tylko się okaże że zmarnowalam kupe czasu na taką błachostkę
Takie cos co napisalam na szybko pewnie jest źle:
ALTER TABLE `tabela` ADD NR_DOST CHAR UNIQUE "D"+ID+"_"+DATA;

ostatnie 2 cyfry myslalam zeby uzyskac poprzez date('y')ale to pobierze mi dzisiejszy rok tylko a cyfre po D zamierzałam uzyskac poprzez sprawdzenie jaka byla ostatnia i jezeli mamy ten sam rocznik to nalezy dodac 1 do ostatniej, zapewne to rozumowanie tez jest zle bo podejrzewam ze mozna to zrobic uzywajac tylko komend mysqla:P tylko jak? Wszelka pomoc mile widziana:)
pmir13
Zakładam że data jest w kolumnie typu DATE, jeśli nie, musisz najpierw do takiego formatu przejść.

Musimy obliczyć nr_dost dla wszystkich rekordów, czyli:
1. Wstawić literkę 'D'
2. Dla danego id i daty obliczyć która to była dostawa w tym samym roku i dodać do literki
3. Dodać '_'
4. Dodać rok w postaci dwóch cyfr.
Większość z tych rzeczy jest dość prosta do zrobienia, wykorzystujemy CONCAT i DATE_FORMAT, trudności może sprawić natomiast 2.
Ten numer otrzymamy przez podzapytanie, na przykład dla id=5 i daty 2012-05-02 z przykładu będziemy wykonywać:
  1. SELECT COUNT(t.id) AS numer_dostawy FROM tabela t WHERE YEAR(t.DATA)=YEAR('2012-05-02') AND ( t.data< '2012-05-02' OR t.DATA='2012-05-02' AND t.id<=5)

Ostatni warunek jest konieczny by uporządkować dostawy przeprowadzone tego samego dnia, bo inaczej wszystkie miałyby ten sam numer.
Dla wszystkich dostaw o numerze decyduje więc najpierw data, a później id.
Zapytanie do obliczania nr_dost będzie więc wyglądać tak:
  1. SELECT CONCAT(
  2. 'D',
  3. (SELECT COUNT( t.id ) FROM tabela t
  4. WHERE YEAR( t.DATA ) = YEAR( tabela.DATA )
  5. AND ( t.DATA < tabela.DATA OR t.DATA = tabela.DATA AND t.id <= tabela.id ) ),
  6. '_',
  7. DATE_FORMAT( tabela.DATA, '%y' )
  8. )
  9. FROM tabela

botwinka
Dzięki wielkie! Bardzo mi to pomogło:) fajnie się czegoś nowego nauczyć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.