Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dodanie rekordu, w którym id = auto_increment a cos = id
SHiP
post 19.03.2008, 21:09:18
Post #1





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

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


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?


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
Sadu2
post 19.03.2008, 22:30:46
Post #2





Grupa: Zarejestrowani
Postów: 229
Pomógł: 13
Dołączył: 31.05.2007

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


  1. INSERT INTO tabelka (niewazne, cos) VALUES ('test test test', '$id')


Może tak?
Go to the top of the page
+Quote Post
SHiP
post 19.03.2008, 23:13:08
Post #3





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

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


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.


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
zzeus
post 19.03.2008, 23:49:43
Post #4





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

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


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();


Ten post edytował zzeus 19.03.2008, 23:53:18


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 07:23