Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] logika SQL w bazie, odbieranie serii danych
zietek
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 1
Dołączył: 25.12.2007

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


Witam,

Jak do tej pory wszystkie wieksze projekty (aplikacje webowe) tworzylem przy wykorzystaniu bazy MS SQL Server 2005 Express.
Baza calkiem przyjemna, pomijajac brak wyrazen regularnych, zmiennych typu array oraz jednoplatformowosc.

Przyszedl jednak moment, w ktorym trzeba bedzie sie przesiasc na baze wieloplatformowa (win, linux).

Do wyboru mam MySQL oraz PosgreSQL.
Sklanialbym sie w kierunku Posgresql (wieksze mozliwosci), jednak martwi mnie brak jak na dzisiejsze czasy procedur skladowanych - czyli brak mozliwosci oddzielenia logiki jezyka SQL od kodu PHP.

Przy wykorzystaniu MS SQL'owych procedur skaldowanych mozna np zgrupowac kilka SELECTow i otrzymac poprzez jedno polaczenie z baza serie danych tabelaryczncych, np:

  1. CREATE PROC nazwa_procedury
  2. @zmienna nvarchar(1)
  3. AS SELECT * FROM kolory WHERE nazwa LIKE @zmienna + '%'
  4. SELECT * FROM ulice SELECT * FROM miasta


  1. EXEC nazwa_procedury 'a'
powoduje jednoszesne otrzymanie danych z trzech zapytan (a tylko jedno polaczenie do bazy).

Czy istnieje analogiczna mozliwosc oddzielenia logiki SQL i pozostawienia jest w bazie PosgreSQL (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Z tego co udalo mi sie ustalic mamy tylko do dyspozycji fukcje skladowane, przez ktore nie da rady zwrocic wynikow zapytan kilku SELECTow jednoczescie...
Go to the top of the page
+Quote Post
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Nie znam MsSQL stąd nie do końca wiem, jak takie zapytanie w nim by działało.

Jeśli jednak wszystkie te tabele mają taką samą konstrukcję ((IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ) to możesz skorzystać z klauzuli UNION, zarówno na poziomie jednego zapytania, jak i procedury napisanej w jednym z kilku języków obsługiwanych przez PG ( PL/pgSQL, C/PgSQL, Perl, Python, a nawet PHP)
Go to the top of the page
+Quote Post
zietek
post
Post #3





Grupa: Zarejestrowani
Postów: 34
Pomógł: 1
Dołączył: 25.12.2007

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


W MsSQL zapytanie to zwraca 3 osobne tabele. Nie musza miec jednakowej konstrukcji. Po prostu dostaje sie obiekt Table[0], Table[1], Table[2], a w nim juz normalnie dane z poszczegolnych tabel. To bardzo ulatwia sprawe, nie musimy sie kilkukrotnie laczyc z SQL w celu wygenerowania jakies podstrony....
Go to the top of the page
+Quote Post
prond
post
Post #4





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

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


Niestety w PostgreSQL nie jest możliwe zwrócenie wyników o różnych ROWTYPE'ach (inny zestaw kolumn).
Jeśli jednak przeszkadzają ci wszelkie braki w funkcjonalności to raczej wybierz Postgre zamiast MySQL, ponieważ dla tego kryterium Postgre ma dużo większą przewagę nad MySQL.

Jest naturalnie obejście dla podanego przez Ciebie problemu - typy złożone. Tylko nie wiem jak są one potem odbierane na poziomie aplikacji, ale najprawdopodobniej jako string w formacie ala JSON.
Go to the top of the page
+Quote Post
zietek
post
Post #5





Grupa: Zarejestrowani
Postów: 34
Pomógł: 1
Dołączył: 25.12.2007

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


To by bylo calkiem ciekawe rozwiazanie. PHP 5.x ma funkcje konwertujaca string JSON => array.
Czy w PostgreSQL mozna w latwy sposob wynik zapytania SELECT przekonwertowac do Stringu JSON, czy trzeba zrobic to we wlasnym zakresie ?
Go to the top of the page
+Quote Post

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: 15.09.2025 - 11:22