Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> IF EXISTS [...] THEN ... ELSE ... END Ewentualnie inna solucja...
exseerius
post
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 31.12.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował exseerius 27.10.2008, 12:24:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
expert
post
Post #2





Grupa: Zarejestrowani
Postów: 211
Pomógł: 4
Dołączył: 29.10.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 10:23