Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] logika SQL w bazie, odbieranie serii danych
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
zietek
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 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...
DeyV
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ę (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)
zietek
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....
prond
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.
zietek
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 ?
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.