Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> jak wykorzystać "Świeży" id jako dane do innej tabeli
acainoks
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 29.10.2009

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


Witam wszystkich zainteresowanych problemem podejrzewam że nie tylko ja mam taki problem

Wysyłam do bazy danych dwa polecenia dodania danych do dwóch różnych tabel
PIERWSZA

ID_pierwsza|dane|dane|dane|dane

DRUGA

ID_druga|dane|dane|dane|ID_pierwsza

zależy mi na tym aby id_pierwsza trafiło jako dane do drugiej tabeli
czy można to zrobić za pomocą jakieś wbudowanej funkcji czy tez trzeba kombinować z procedurami i wyzwalaczami

dziękuję za zaangażowanie i pozdrawiam
Go to the top of the page
+Quote Post
Nh2003
post
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 3.10.2007

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


http://pl2.php.net/manual/en/function.mysql-insert-id.php
Go to the top of the page
+Quote Post
artur_dziocha
post
Post #3





Grupa: Zarejestrowani
Postów: 320
Pomógł: 53
Dołączył: 18.09.2007
Skąd: Radom

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


Wykoarzystaj pozdapytanie
Go to the top of the page
+Quote Post
acainoks
post
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 29.10.2009

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


Nh2003 nie wiem czy mysql_insert_id() jest dobrym pomysłem, załóżmy że mam więcej tabel i w każdej mam ID AUTO INCREMENT i do tego kilkaset użytkowników to wydaje mi się że jest taka możliwość że jakiś użytkownik się "wstrzeli" między insert do tabeli PIERWSZEJ i insert do tabeli DRUGIEJ i wtedy pobierze mu id niewłaściwy. Gdybym chciał np w niedalekim czasie przejść na id generowane ze znaków to mysql_insert_id() w ogóle odpada.

artur_dziocha możesz przybliżyć mi twój pomysł?

Bardziej interesuje mnie procedura która w jakiś sposób przypisuje nowy id do zmiennej w w tej samej procedurze go wykorzystuje jeżeli jest coś takiego możliwe.
Go to the top of the page
+Quote Post
artur_dziocha
post
Post #5





Grupa: Zarejestrowani
Postów: 320
Pomógł: 53
Dołączył: 18.09.2007
Skąd: Radom

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


Może coś taiego??
  1. $sql1 = "INSERT INTO PIERWSZA (dane11, dane12) VALUES (dane11, dane21);
  2. $sql2 = "INSERT INTO DRUGA (dane21, dane22, dane23, ID_pierwsza) VALUES (dane21, dane22, dane23, SELECT ID_pierwsza FROM PIERWSZA WHERE dane11=dane11 AND dane12=dane12);
Go to the top of the page
+Quote Post
acainoks
post
Post #6





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 29.10.2009

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


artur_dziocha na początek może być taka konstrukcja, nawet mam gdzieś podobną w innym miejscu

a może by spróbować czegoś takiego

  1. CREATE PROCEDURE proc ()
  2. BEGIN
  3. DECLARE zmienna_id CHAR;
  4.  
  5. INSERT INTO pierwsza (id_p) VALUES (''); //jakoś zaznaczyć teraz id_p INTO zmienna_id
  6. INSERT INTO druga (id_d, inne_id) VALUES ('',zmienna_id);
  7. END//


nie znam się tak bardzo na MySQL aby samemu sobie z tym poradzić a jeżeli ktoś wie że jest to niemożliwe w ten sposób to proszę mnie uświadomić (IMG:style_emoticons/default/smile.gif)
pozdrawiam
Go to the top of the page
+Quote Post
cojack
post
Post #7





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


http://antczak.org/2009/11/pobieranie-id-d...e-i-postgresql/
Go to the top of the page
+Quote Post
#luq
post
Post #8





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


@acainoks, wydaje mi się że tak właśnie nie jest, że można się wstrzelić pomiędzy zapytania jednego usera. W sumie nie wiem, ja stosuje mysql_insert_id() + transakcja oczywiście i problemów nie mam. Wydaje mi się, że przy transakcji takie coś nie jest możliwe, bo zapytania wykonują się zaraz po sobie...

Ja bym polecał
mysql_insert_id + transakcja
Go to the top of the page
+Quote Post
Mchl
post
Post #9





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Cytat(acainoks @ 8.07.2010, 09:57:34 ) *
Nh2003 nie wiem czy mysql_insert_id() jest dobrym pomysłem, załóżmy że mam więcej tabel i w każdej mam ID AUTO INCREMENT i do tego kilkaset użytkowników to wydaje mi się że jest taka możliwość że jakiś użytkownik się "wstrzeli" między insert do tabeli PIERWSZEJ i insert do tabeli DRUGIEJ i wtedy pobierze mu id niewłaściwy. Gdybym chciał np w niedalekim czasie przejść na id generowane ze znaków to mysql_insert_id() w ogóle odpada.


Nie ma takiej możliwości. Inaczej ta funkcja byłaby całkowicie bezużyteczna. Ostatnio wstawiony ID jest przechowywany dla każdego połączenia osobno i nie ma możliwości żeby dwóch różnych użytkowników pomieszało sobie nawzajem.

Tutaj dokładne objeaśnienie jak działa ta funkcja http://dev.mysql.com/doc/refman/5.1/en/inf..._last-insert-id

A po co miałbyś przechodzić na id generowane ze znaków? To znaczy wiem, że są ludzie którzy lubią utrudniać sobie życie, ale jestem ciekaw motywu.
Go to the top of the page
+Quote Post
prond
post
Post #10





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

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


LAST_INSERT_ID to dobry pomysł, ale trzeba wszystko zrealizować w warstwie bazodanowej:

  1. BEGIN;
  2. INSERT INTO master (created) VALUES (NOW());
  3.  
  4. SET @myid = LAST_INSERT_ID();
  5.  
  6. INSERT INTO detail (master_id, title) VALUES (@myid, 'Johny');
  7. INSERT INTO detail (master_id, title) VALUES (@myid, 'Tonny');
  8. INSERT INTO detail (master_id, title) VALUES (@myid, 'Ronnie');
  9.  
  10. COMMIT;
Go to the top of the page
+Quote Post
Mchl
post
Post #11





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Dlaczego 'trzeba'?
Go to the top of the page
+Quote Post
acainoks
post
Post #12





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 29.10.2009

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


Jestem już przekonany do auto increment, bo w sumie po co sobie utrudniać tylko interesuje mnie jeszcze kwestia dwóch ostatnich postów czyli warstwy bazodanowej trzeba czy nie trzeba?
Go to the top of the page
+Quote Post
Mchl
post
Post #13





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Nie trzeba. Ani w bazie danych, ani w transakcji (aczkolwiek czasami trzeba w transakcji z innych powodów).

Warto poczytać link który wstawiłem powyżej, bo wyjaśnia wiele wątpliwości (na przykład co zwróci LAST_INSERT_ID() po wielowierszowym insercie).

Ten post edytował Mchl 9.07.2010, 23:32:49
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: 15.09.2025 - 03:07