Связка двух таблиц

kyzma

Новичок
Связка двух таблиц

Поделитесь пожалуйста опытом по связке двух таблиц одним полем. Я сейчас это делаю черз скрипт php в два запроса. Нет ли способа это делать мощностями Postgres? К примеру если я удаляю запись в одной таблице как сделать чтобы автоматом удалялись данные в другой по связывающему уникальному полю, например ID:

PHP:
  $res = pg_query($conn,"SELECT max(id) FROM table");

  $i = pg_fetch_result($res,0,0);
  $grnti_check = $_POST['grnti'];

  foreach ($gt_ch as $value) {
    $res = pg_query($conn,"INSERT INTO grnti VALUES ('$value','$i')");
  }
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
По поводу приведённого кода: так делать не надо. Надо использовать последовательности.
См. сюда и сюда
 

slach

Новичок
2Sad Spirit ;) а insert_ID() через SERIAL вытащить можно ? как ?

или при объявлении типа SERIAL автоматом создается SQUENCE {$table_name}_{$field_name}_seq?
 

Vetal

Новичок
PHP:
  $grnti_check = $_POST['grnti']; 

  foreach ($gt_ch as $value) { 
    $res = pg_query($conn,"INSERT INTO grnti VALUES ('$value',(SELECT max(id) FROM table))"); 
  }
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: slach
2Sad Spirit ;) а insert_ID() через SERIAL вытащить можно ? как ?

или при объявлении типа SERIAL автоматом создается SQUENCE {$table_name}_{$field_name}_seq?
Именно
Код:
test=# create table foobar (id serial);
NOTICE:  CREATE TABLE will create implicit sequence "foobar_id_seq" for serial column "foobar.id"
CREATE TABLE
test=# select pg_get_serial_sequence('foobar', 'id');
 pg_get_serial_sequence
------------------------
 public.foobar_id_seq
(1 запись)

test=# insert into foobar default values;
INSERT 90108 1
test=# select currval(pg_get_serial_sequence('foobar', 'id'));
 currval
---------
       1
(1 запись)
 

kyzma

Новичок
Вот от темы то отлонились как. Я подразобрался как связывать таблицы перечитав подробнее мануалку по Постгресу. Вот пример:


CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric
);

CREATE TABLE orders (
order_id integer PRIMARY KEY,
shipping_address text,
...
);

CREATE TABLE order_items (
product_no integer REFERENCES products ON DELETE RESTRICT,
order_id integer REFERENCES orders ON DELETE CASCADE,
quantity integer,
PRIMARY KEY (product_no, order_id)
);
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: kyzma
Вот от темы то отлонились как.
не отклонились: вот ты привёл только схемы таблиц, а из них совершенно непонятно, как ты собираешься генерировать первичные ключи и как вставлять order_id в таблицу order_items.

а мы как раз это и обсуждали.
 
Сверху