Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: IF EXISTS [...] THEN ... ELSE ... END Ewentualnie inna solucja...
Forum PHP.pl > Forum > Bazy danych > MySQL
exseerius
Na razie krótko bo do pracy się spieszę:

  1. REPLACE `listy` (`adresat` , `numer` , `data` )
  2. SELECT z.adresat, x.nr_listu, x.DATA FROM typy z
  3. LEFT OUTER JOIN temp_info x ON z.id_t = x.typ
  4. WHERE x.id = 1225091395


to dziala, ale jeżeli ktoś nie poda numeru listu (bo taka jest możliwość!) to dla danej wysyłki numerem listu przewozowego będzie 0 a to oanacza, że pole z numerem 0 zawsze bedzie aktualizowało sobie datę i typ.

Czy da się zapytaniem mysqlowym zrobić, żeby w przypadku braku listu nie przypisywał on nic, a jeżeli nr będzie to robił co powyżej?

Jak pisałem lecę do pacy, później postaram się trochę rozszerzhyć mój problem jak to dokładnie wygląda...

-- edit --
Jak obiecałem troche wiecej kodu:
  1. REPLACE `listy` (`adresat` , `numer` , `data` )
  2. SELECT z.adresat, x.nr_listu, x.DATA FROM typy z
  3. LEFT OUTER JOIN temp_info x ON z.id_t = x.typ
  4. WHERE x.id = '".$_GET['ch']."';
  5.  
  6. INSERT `idlist` ( `id_id` )
  7. VALUES ( '".$_GET['ch']."' );
  8.  
  9. INSERT `wysylki` ( `id_w` , `typ` , `placowka` , `list` , `osoba` )
  10. SELECT j.id, l.typ, l.placowka, k.id_l, l.osoba FROM temp_info l
  11. LEFT OUTER JOIN listy k ON k.numer = l.nr_listu
  12. LEFT OUTER JOIN idlist j ON j.id_id = l.id
  13. WHERE l.id = '".$_GET['ch']."';
  14.  
  15. INSERT `dokumenty` ( `wysylka` , `nazwisko` , `pesel` , `numer` , `extra` , `inne` , `uwagi` )
  16. SELECT l.id, k.nazwa, k.pesel, k.numer, k.extra, k.inne, k.uwagi FROM idlist l
  17. LEFT OUTER JOIN temp_dok k ON l.id_id = k.id_wysylki
  18. WHERE `id_id` = '".$_GET['ch']."'


$_GET['ch'] - to zmienna przesyłająca ID listu podczas wprowadzania danych.

Teraz sprawa ma sie tak. Chciałbym, ażeby:
- w pierwszym zapytaniu jeżeli nie ma listu to żeby dodał się z wartością 0 (tak się robi), ale jeżeli jak później doda ktoś numer listu z identyczną datą i identycznym adresatem (adresatów jest tylko dwóch), to żeby wtedy numer się zaktualizował do wybranego

- reszta kodu w sumie nie jest konieczna , żeby mi pomóc, ale może ktoś wyłapie jakieś moje błędy składniowe biggrin.gif

kombinowałem z jakimiś CASE WHEN ... THEN ... END, ale coś chyba składnia mi nie wychodzi, albo nie wiem w którym miejscu to walnąć, a z IF'ami też mi nie idzie. Jakaś mała podpowiedź?

Struktury koniecznych tabel raczej wynikają z zapytań (w każdej tabeli jest jeszcze extra pole ID, które ma ustawiony auto_incediment, który wiadomo sam się zwiększa o jeden jeżeli nie podaje się wartości)

BTW jest jakaś komenda multi_query w MySQL? Jak kombinowałem z mysqli_multi_query wywalało mi polecenia, że nieznana komenda (w MySQL 4 jak i 5.0.6)...

Pozdrawiam,

-- edit --

ok może powiem o co by mi chodziło i ktoś bedzie w stanie pomóc mi.

jest tabelka listy
| id_l | adresat | numer | data

I teraz z formularza przychodzą dane jak wyżej jest adresat, jest numer, jest data, ale czasem numer może być pusty!

Zadaniem zapytania mysql miałoby być dodanie rekordu z adresatem, datą i ewentualnym numerem (jeżeli nie ma niech zostawi puste), i teraz założenia:

- jeżeli nie ma jeszcze listu z danego dnia i/lub do konkretnego adresata - dodaje wpis INSERT INTO VALUES ('adresat','nr_listu','data');
- jeżeli jest wpis z danego dnia i/lub konkretnego adresata ale NIE ma nr_listu - UPDATE SET numer > nr_listu
- jeżeli jest wpis i jest uzupełniony o wszystko niech nie robi nic

Jakieś sugestie? Bo nie ma problemu o wykonanie tego zapytaniami przez PHP, ale po co jak mysql sam może to zrobić biggrin.gif
expert
Podejrzewam, że samym MYSQL tego nie zrobisz. Będziesz musiał sprawdzać, czy $_GET['ch'] jest równe coś tam. A po za tym, jeżeli GET bierzesz z adresu, to musisz je filtrować, bo ktoś ci może wpisać DROP TABLE i po całej bazie.
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.