Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Insert do dwóch tabel
Forum PHP.pl > Forum > Bazy danych
cursor81
witam,

Mam dwie tabele polączene z soba relacja 1-n czy jest możliwość wstawienia do obu tabel jednocześnie
Kod
tabela1                          tabela2
-----------                      ----------------
tabela1_ID PK                tabela2_ID PK(autonumerowanie)
tabela2_ID FK                pole1

(dla wielu rekodów tabela1 istnieje jedno z tabela2)
dla tabeli2: INSERT INTO tabela2 (pole1) VALUES('test')

i teraz bym chciala zeby jak dodaje to pole1 wstawialo mi do tabela1 vartosc tabela2_ID skad moge wiedzec jaka wartosc ma to pole jesli jest ono autonumerowane
Kinool
klucze obce ktorych mysql jeszcze nie obsluguje (wersja 5.0 ma miec je zaimplementowane) obejscie tego problemu moze byc wykorzystanie mysql_insert_id" title="Zobacz w manualu PHP" target="_manual i zrobienie 2 zapytania INSERT
mario
lub użyć prostego zapytania:

  1. <?php
  2. $zapytanie = &#092;"SELECT id FROM oferta ORDER BY id DESC\";
  3. $result = mysql_query($zapytanie);
  4. $id = mysql_result ($result, 0);
  5. ?>
cursor81
dzieki za trop o to mi wlasnie chodzilo smile.gif
sobstel
Cytat(mario @ 2005-05-02 12:10:03)
lub użyć prostego zapytania:

  1. <?php
  2. $zapytanie = &#092;"SELECT id FROM oferta ORDER BY id DESC\";
  3. $result = mysql_query($zapytanie);
  4. $id = mysql_result ($result, 0);
  5. ?>

jendak osobiscie radzilbym uzyc rozwiazania @Kinoola z mysql_insert_id (jesli to mysql). to co napisal @mario to nic innego jak pisanie niewydajnej alternatywy dla czegos co juz wymyslone i jest do tego bardzo proste.
SongoQ
Cytat
klucze obce ktorych mysql jeszcze nie obsluguje (wersja 5.0 ma miec je zaimplementowane)

O to dziwne bo ja uzywam w 4.x i dziala znakomicie. smile.gif (INNODB)

Cytat
obejscie tego problemu moze byc wykorzystanie mysql_insert_id i zrobienie 2 zapytania INSERT

A co z kluczami obcymi zrobisz to w jednym zapytaniu? O pierwsze slysze.

Jesli jest inaczej uswiadom mnie:)
cursor81
w zasadzie potrzebuje tego do ms sql i sie wlasnie pogubilam ;(
  1. CREATE PROCEDURE DodajRejestracjaPacjent
  2.  
  3. @PacjentID Int = NULL,
  4. @DataRejestracji DateTime = NULL,
  5. @OddzialNazwa VarChar(64) = NULL,
  6. @NazwaChoroby varchar(256) = NULL,
  7. @i int =NULL AS DECLARE @OddzialKod Char(10)
  8. DECLARE @RejestracjaID int
  9. DECLARE @ChorobaKod char(5)
  10.  
  11. SET @OddzialKod = (SELECT OddzialKod
  12. FROM sOddzial WHERE OddzialNazwa = @OddzialNazwa)
  13. <span style="font-weight: bold;">set @RejestracjaID = (SELECT RejestracjaID
  14. FROM tRejestracja )
  15. SET @ChorobaKod =(SELECT ChorobaKod
  16. FROM sNazwaChoroby WHERE NazwaChoroby = @NazwaChoroby)
  17.  
  18. INSERT
  19. INTO tRejestracja ( PacjentID, DataRejestracji, OddzialKod)
  20. VALUES (@PacjentID, @DataRejestracji, @OddzialKod)
  21. <span style="font-weight: bold;">
  22. IF EXISTS (SELECT OddzialKod
  23. FROM sOddzial) INSERT
  24. INTO sRozpoznania (ChorobaKod, RejestracjaID) VALUES ( @ChorobaKod, @RejestracjaID)
  25. GO

chodzii mi o ten fragment:

if exists (SELECT OddzialKod FROM sOddzial)
INSERT INTO sRozpoznania (ChorobaKod, RejestracjaID) VALUES ( @ChorobaKod, @RejestracjaID)


jak zapisac bierzace RejestracjaID ktore tworzy sie przy wstawianiu

INSERT INTO tRejestracja ( PacjentID, DataRejestracji, OddzialKod)
VALUES (@PacjentID, @DataRejestracji, @OddzialKod)


RejestracjaID jest autonumerowane w tRejestracja
-------------
ok juz znalazlam @@IDENTITY zwraca wartosc ostatniego wstawionego wiersza.

jakby kmus kiedys sie to przydalo to powinno wygladac tak zeby dzialalo :
  1. CREATE PROCEDURE DodajRejestracjaPacjent
  2.  
  3. @PacjentID Int = NULL,
  4. @DataRejestracji DateTime = NULL,
  5. @OddzialNazwa VarChar(64) = NULL,
  6. @NazwaChoroby varchar(256) = NULL,
  7. @i int =NULL AS DECLARE @OddzialKod Char(10)
  8. DECLARE @RejestracjaID int
  9. DECLARE @ChorobaKod char(5)
  10.  
  11. SET @OddzialKod = (SELECT OddzialKod
  12. FROM sOddzial WHERE OddzialNazwa = @OddzialNazwa)
  13.  
  14. SET @ChorobaKod =(SELECT ChorobaKod
  15. FROM sNazwaChoroby WHERE NazwaChoroby = @NazwaChoroby)
  16.  
  17. INSERT
  18. INTO tRejestracja ( PacjentID, DataRejestracji, OddzialKod)
  19. VALUES (@PacjentID, @DataRejestracji, @OddzialKod)
  20.  
  21. SET @RejestracjaID = (SELECT RejestracjaID
  22. FROM tRejestracja WHERE RejestracjaID = @@IDENTITY )
  23.  
  24. IF EXISTS (SELECT OddzialKod
  25. FROM sOddzial) INSERT
  26. INTO sRozpoznania (ChorobaKod, RejestracjaID) VALUES ( @ChorobaKod, @RejestracjaID)
  27. GO


Wielkie dzieki wszystkim za pomoc.
SongoQ
Znalazlem jeszcze.

SELECT SCOPE_IDENTITY
IDENT_CURRENT
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.