Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dodanie rekordu, w którym id = auto_increment a cos = id
Forum PHP.pl > Forum > Bazy danych
SHiP
Mam problem z zapytaniem. Dajmy na to że mam tabelkę

id int(10) auto_increment
niewazne char(90)
cos int(10) default '0'

przy czym id jest primary key i unique

Teraz chcialbym dodać rekord na zasadzie:
  1. INSERT INTO tabelka (niewazne, cos) VALUES ('test test test', id)


Niestety taka konstrukcja nie chce działać. pole cos przyjmuje wartość domyślną '0'
Oczywiście troche to uprościłem dla tego przykładu, pole cos nie zawsze przyjmuje wartosc pola id ale jest to sterowane przez php więc problem jest jedynie ze sformułowaniem dobrego zapytania. Jakieś pomysły?
Sadu2
  1. INSERT INTO tabelka (niewazne, cos) VALUES ('test test test', '$id')


Może tak?
SHiP
Tak to nie zadziała. Składnia jest zwykła pole=pole. W tym problem ze pola AUTO_INCREMENT są wyjątkiem
Cytat
An expression expr can refer to any column that was set earlier in a value list. For example, you can do this because the value for col2 refers to col1, which has previously been assigned:

INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);

But the following is not legal, because the value for col1 refers to col2, which is assigned after col1:

INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);

One exception involves columns that contain AUTO_INCREMENT values. Because the AUTO_INCREMENT value is generated after other value assignments, any reference to an AUTO_INCREMENT column in the assignment returns a 0.

A jak sobie z tym poradzić to już nie mam zielonego pojęcia.
zzeus
Musisz dodać rekord, poźniej odczytac ostatni id dodany do bazy i zrobic update na tym rekordzie podstawiajac id

Kod
INSERT INTO tabelka (niewazne) VALUES ('test test test')
  $id = last_indert_id;
  UPDATE tabelka SET cos = '$id' WHERE id = '$id'


przy czym za last_insert_id podstawiasz ostatni id dodany do bazy, który musisz wyciągnąć, np. jeśli używasz AdoDB
Kod
$id = $db->Insert_ID();
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.