Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> typ tablicowy
Skobi
post
Post #1





Grupa: Zarejestrowani
Postów: 174
Pomógł: 1
Dołączył: 19.02.2004

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
SongoQ
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


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}'
Go to the top of the page
+Quote Post
Skobi
post
Post #3





Grupa: Zarejestrowani
Postów: 174
Pomógł: 1
Dołączył: 19.02.2004

Ostrzeżenie: (10%)
X----


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}
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


  1. UPDATE
  2. tabela SET pole = pole + '{dodawana wartosc}'
Go to the top of the page
+Quote Post
Skobi
post
Post #5





Grupa: Zarejestrowani
Postów: 174
Pomógł: 1
Dołączył: 19.02.2004

Ostrzeżenie: (10%)
X----


niestety nie działa, a robie tak:

  1. UPDATE proba SET a = a + '{0,0,0,0}';
Go to the top of the page
+Quote Post
SongoQ
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


U mnie takie cos dziala tylko ze mam typ int4
Go to the top of the page
+Quote Post
Blackhole
post
Post #7





Grupa: Zarejestrowani
Postów: 283
Pomógł: 1
Dołączył: 15.11.2004
Skąd: Mikołów

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


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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Czy ten pierwszy sposób rzeczywiście zapisuje do tablicy? Ja w to bardzo wątpię (IMG:http://forum.php.pl/style_emoticons/default/blink.gif) Jak więc poprawnie zapisać tablicę liczb do bazy :?:
Go to the top of the page
+Quote Post
SongoQ
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


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
Go to the top of the page
+Quote Post
Blackhole
post
Post #9





Grupa: Zarejestrowani
Postów: 283
Pomógł: 1
Dołączył: 15.11.2004
Skąd: Mikołów

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


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





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


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.
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: 28.12.2025 - 11:32