Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: typ tablicowy
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
Skobi
Witam,

Chciałbym zapytać o typ tablicowy, a mianowicie:

  1. CREATE TABLE proba
  2. (
  3. a integer[]
  4. );
  5.  
  6. INSERT
  7. INTO proba ( a ) VALUES ( '{1,2,3,4,5,6,7}' );


i otrzymuje rekord z tablica o 7 indeksach. Moje pytanie brzmi jak aktualizować ten rekord tzn. dodać kolejne indeksy tablicy aby uzyskać np.:

Kod
{1,2,3,4,5,6,7,8,9,10}


czyli zwiększyć tablice i 3 indeksy
SongoQ
Tak samo jak dodajesz rekord

  1. UPDATE tabela SET = '{1,2,3,4,5,56}'


Tylko pamietaj ze to zapytanie nie dodaje Ci nowych wartosci do tego pola, lecz je modyfikuje. Jesli masz w polu {1,2} i chesz miec {1,2,3} to musisz SET = '{1,2,3}'
Skobi
ok, działa tylko jak zwiększyć ilość indeksów tablicy z zachowaniem istniejących wartości w już istniejących indeksach, czyli:

mam tablice
{23,4,56,56}

i chce ją zmienić na
{23,4,56,56,0,0,0}
SongoQ
  1. UPDATE
  2. tabela SET pole = pole + '{dodawana wartosc}'
Skobi
niestety nie działa, a robie tak:

  1. UPDATE proba SET a = a + '{0,0,0,0}';
SongoQ
U mnie takie cos dziala tylko ze mam typ int4
Blackhole
Ja tworzę taką tablicę
Kod
CREATE TABLE lotto_multi (
    id  serial,
    data    date UNIQUE,
    liczby    int[20]
);
i wydaje mi się, że jak zapisuję do niej dane instrukcją
Kod
INSERT INTO lotto_multi (data,liczby) VALUES ('2005-04-18','{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}');
to nie zapisuję tam tablicy, tylko ciąg znaków. Gdy spróbowałem zapisać przez
Kod
INSERT INTO lotto_multi (data,liczby) VALUES ('2005-04-18',{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1});
to był błąd sad.gif
Czy ten pierwszy sposób rzeczywiście zapisuje do tablicy? Ja w to bardzo wątpię blink.gif Jak więc poprawnie zapisać tablicę liczb do bazy :?:
SongoQ
Z tego co przeczytalem w dokumentacji mozliwe jest takie uzycie

  1. INSERT
  2. INTO tests VALUES (ARRAY[1,2]);
  3. INSERT
  4. INTO tests VALUES ('{1,3}');
  5.  
  6. SELECT *
  7. FROM tests WHERE a = '{1,2}';
  8. SELECT *
  9. FROM tests WHERE a = ARRAY[1,3];



Cytat
INSERT INTO lotto_multi (data,liczby) VALUES ('2005-04-18',{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1});

Wiec to wychodzi na to ze to zapytanie jest nieprawidlowe.

Jest tez mozliwosc stosowania tablic wielowymiarowych
Blackhole
Ciekawi mnie tylko, jak PostgreSQL zapisuje te tablice. To pewnie nie jest tak, jak w php. Jak odczytam wartość spod kolumny 'liczby', którą to wartość wpisałem poprzez podany wyżej poprawny kod, to "oczami" php nie jest to tablica, ale zwykły ciąg znaków.
SongoQ
To jest tylko reprezentacja tablicy. Radze poczytac manual, tam jest wszystko.

Odnosnie zapytan zawsze mozesz wyciagac jakis element tablicy
  1. SELECT pole[0]
  2. FROM tabela


@Blackhole
Cytat
którą to wartość wpisałem poprzez podany wyżej poprawny kod, to "oczami" php nie jest to tablica, ale zwykły ciąg znaków.


php zapisuje tak samo tylko dodaje jeszcze rozmiar i typ zmiennych.
Poczytaj o serializacji tablic. Zrob sobie przyklad i porownaj.
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.