Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przerzucanie bazy danych., Po optymalizacji.
exseerius
post
Post #1





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

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


Witam,

Napisałem sobie kiedyś prowizorycznie i na szybko program do raportowania wysyłek. Spieszyło mi się, więc nie dbałem specjalnie o optymalizację itp. Teraz jak już baza trochę waży powstała nowa wersja mego programu i działa na innej bazie danych, gdzie jest inny układ kolumn. Prawie udało mi się wszystko przewalić, ale zatrzymałęm się w miejscu.

Otóż mam takie coś:
  1. INSERT INTO db2.dokumenty (id_wysylki , nazwa , pesel , numer , uwagi)
  2. SELECT ch_id , name , p_n REGEXP '^[0-9]{11}$', p_n REGEXP '^[a-zA-Z]{3}[0-9]{9}$' , uwagi FROM db1.dokumenty;


W miejscach, gdzie jest regexp wpisuje mi 1 lub zero, w zaleznosci, czy spelniony jest lub nie warunek, ale ja chcę, zeby wpisał mi wartość komórki (kiedys pole do trzymania numeru id wysylki, lub peselu odbiorcy bylo w tej samej kolumnie, teraz jest to rozwalone na dwie). Kombinowałem z IFami, ale nie wiem jak za bardzo ich użyć (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

A i od razu pytanie bo też nie wiem. Czy jest jakaś możliwość wykonywania procedur na przykładzie:
  1. CALL nazwa_procedury(SELECT id_wysylki FROM db2.dokumenty);


Próbowałem i mi to zadziałać nie chce, ale może coś źle konstruuję zapytanie... W procedurze mam jedną zmienną, która jest identyfikatorem wysyłki, a później to już samo śmiga (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Dzięki za odpowiedź, pozdrawiam,

Ten post edytował exseerius 5.12.2008, 12:14:31
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


musisz ograniczyć wynik SELECT'a do jednego rekordu z jednym polem... przykładowo:
  1. CALL nazwa_procedury(SELECT `id_wysylki` FROM `db2`.`dokumenty` WHERE `id` = 1;)

albo:
  1. CALL nazwa_procedury(SELECT `id_wysylki` FROM `db2`.`dokumenty` LIMIT 1;)


a jeżeli chcesz wywołać procedurę dla wszystkich `id_wysyłki`, to spróbuj (nie wiem czy zaskoczy, nie mogę w tej chwili sprawdzić):
  1. SELECT CALL nazwa_procedury(`id_wysylki`) FROM `db2`.`dokumenty`;


EDIT: sprawdziłem, niestety to powyżej nie działa, ale działa taka konstrukcja, może ci wystarczy:
  1. CREATE FUNCTION abc(x INT) RETURNS char(20) RETURN CONCAT('qqq ', x);
  2. SELECT abc(id_wysylki) FROM dokumenty;
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 14.10.2025 - 00:05