Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][sql] Równoczesny zapis do 2-óch tabel, Jak zapisać dane do dwóch tabel jednocześnie
palixmp
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 19.07.2006

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


Mam formularz i chcę zapisać go do 2 tabel jednocześnie, jaka jest funkcja aby to uczynić jednym kliknięciem.
Dodam jeszcze że, w jednej tabeli dane zostaną "do końca świata" a w drugiej bede owe dane modyfikował, odejmował dodawał i takie tam. Obie tabele są identyczne, z wyjątkiem innych nazw oczywiście:)


Jeśli pisze:
insert into LICZBY values .....

istnieje jakies polecenie które automatycznie doda dane do dwóch identycznych tabel, tylko o innych nazwach, czy należy napisać coś 2 razy (ale w jaki sposób).

Jeśli temat już był bardzo prosze o linka, bo szukam tego dzisiał cały dzień i nic nie mogłem znaleść.

Z góry dzięki.
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


INSERT zapisuje do jednej tabeli i kropka.
Jeśli chcesz zapisać do dwóch tabel wykona dwa INSERTY

Ale jeśli masz tak że:
Cytat(palixmp @ 17.09.2006, 00:21:31 ) *
Obie tabele są identyczne, z wyjątkiem innych nazw oczywiście:)
.. to znaczy że baza jest bardzo źle zaprojektowana i nalezy to zmienić a nie kombinować jak to obejść. No chyba że istnieje jakies wytłumaczenie, ale wątpię.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Jak wyzej + mozesz napisac triggera ktory przy dodawaniu rekordu dopisze go tez do drugiej tabeli.
Go to the top of the page
+Quote Post
palixmp
post
Post #4





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 19.07.2006

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


Dzieki za odpowiedzi, zrobiłem po prostu dwa razy insert (takie łatwe a nie wpadłem na to:) ).

Nawiązując do odpowiedzi mike_mech: to jest magazynek artykłów biurowych, dlatago zrobiłem 2 takie same tabele ARYKULYBIUROWE oraz ARTYKULYBIUROWE_BACK. W tej drugiej tabeli bede tylko zapisywal, a w tej pierwszej np jeśli wloze do magazynku 30 spinaczy, a potem wezme 15, to odejmę z tej tabeli te 15 spinaczy, zeby nastpnym razem mi sie pojawilo ze mam tylko 15 spinaczy a nie 30. Natiomiast w tabeli ARTYKULYWYDANE_BACK chce pozostawic te dane (pierwotne) bo bede potrzebowal ich do raportów.

Jeśli źle rozumuje, to prosze o rade, mysle ze to jest logiczne, ale jeśli są jakieś inne zasady postepowania w takiej sytuacji, to bardzo prosze o wyjaśnienie, bo chcialbym robic według jakiś standardów php, a Wy tutaj sie lepiej orientujecie w tych sprawach.

Z góry dzieki:)
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Te spinacze to tylko przyklad, czy naprawde bedziesz na kazdy jeden spinacz tworzyl nowy rekord?
NIe wiem do czego piszesz te magazynowke, ale spinace to zwykle taki material, ze leci w tysiącach. Podobnie jak grysiki do olowkow. Co inne trzymac rekordy na kasy fiskalne, ktorych kazda ma swoj idetnyfikatror, a co innego na spinacz.
Ale jesli u cibie tych produktow bedzie malo to od biedy moze zostac.

Jesli jednak spinacze chcialbys trzymac w jednym rekordzie i zapisywac tylko ich liczbe, to wystarczyla by jedna tabela. MIalaby dodatkowe pola ilosc_ogolna i ilosc_aktualna.
Ilosc_ogolna by trzymala tę liczbe co ty chiales trzymac w drugiej tabeli, a ilosc_aktualna by zawierala aktualny stan spinaczy.

Jesli widzisz tu jakąs dziure, bo czegos nie zrozumialem jak madzialac Twoj magazyn, to wal smialo, pomyslimy i nad tym (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
palixmp
post
Post #6





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 19.07.2006

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


Dzieki nospor znowu nie pomyślałem ze to takie proste:)(IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A nawiązując do Twojego pytania czy to tylko przykład to niestety nie:)(IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Tylko różnica jest w tym taka, ze nie bede liczył spinaczy ale paczki spinaczy:) Chyba nigdy nie pracowałeś w państwówce, kiedyś zanim tu przyszedłem było tak, ze jak szło sie do ksero, to dostawało sie np 10 kartek i trzeba było to wpisać do zeszytu, a jak któraś Ci się np. podarła to trzeba było napisac sie sie podarła i zwrócić ja do specjalnego kartonu:)(IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ale mniejsza z tym:)

Mam pytanie. Jak zrobić żeby NazwaArtykulu byla unikalna?? Bo np. w dostawie A przywieźli 30 spinaczy, wyciągnąlem 15spinaczy, ale już zamówiłem następną dostawe i m. in. przywieźli 30 spinaczy. I w formularzu z listy rozwijanej NazwaArtykulu (dane pobierane są z bazy) było by widać 2 razy spinacze i chce dodać do tego NrFaktury który jest unikalny, jak do listy rozwijanej dodać 2 wartości z różnych tabel aby było wiadomo z której dostawy jest dany spinacz?? Jeśli mam jakoś przebudować to też prosze o podpowiedź(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

www.palixmp.yoyo.pl/logowanie.php5 to link do tego magazynku, a login to: uzytkownik, a haslo: haslo. Będzie Wam lepiej do zrozumienia, mam nadzieję, ze nikt nie będzie szkodzić, a wpisywać mozecie wszystko bo i tak bede to za pare dni czyścić.

  1. <?php 
  2. function wyswietl_form_adwydane()
  3. {
  4. lacz_moje();
  5. $rezultat1 = @mysql_query('SELECT NazwaArtykulu FROM ARTYKULYBIUROWE');
  6. if (!$rezultat1) {
  7. '<p>Nie mozna pobrac listy Artykulówwydanych z bazy danych.</p>');
  8. } 
  9. ?>
  10. <form action="dodaj_wydane.php5" method=post>
  11. <table width=320 cellpadding=2 cellspacing=0 bgcolor=#cccccc><tr><td>NazwaArtykulu:</td><td>
  12. <select name="NazwaArtykulu" size="1">
  13. <option value="">
  14. <?php
  15.  
  16. while ($ARTYKULYWYDANE = mysql_fetch_array($rezultat1)) {
  17. $aname = htmlspecialchars($ARTYKULYWYDANE['NazwaArtykulu']);
  18.  
  19. echo "<option value='$aname'>$aname</option>n";
  20. }
  21. ?>
  22. </option></select></td></tr>
  23.  
  24. <tr><td>IloscSztuk:</td><td><input type=text name=IloscSztuk></td></tr>
  25. <tr><td>DataWydania:</td><td><input type=text name=DataWydania></td></tr>
  26. <tr><td colspan=2 align=center><input type=submit value="Dodaj artykul wydany"></td></tr>
  27. </table>
  28. </form>
  29. <?php
  30. } ?>


Dodam ze to jest dopiero początek, wiec niema żadnych zabezpieczeń przed wprowadzaniem błędnych danych(poza jednym) i w ogóle jest to w fazie "robót drogowych" wiec prosze nie komentować że jest wieśniacko napisane hihihi:)

Z góry dzieki

Ten post edytował DeyV 21.09.2006, 10:08:37
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Chyba nigdy nie pracowałeś w państwówce
Pracowalem pol roku w Urzędzie Marszalkowskim, a to raczej jest panstwowka (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

POdoba mi sie jedna nazwa artykulu: gumki... Dobrze ze dales opis do mazania bo co innego czlowiekowi chodzi po glowie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Co do unikalnosci to wyswietlaj oprocz nazwy Artykulu numer faktury i bedzie wiadomo skad przyszlo.
Go to the top of the page
+Quote Post
palixmp
post
Post #8





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 19.07.2006

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


Doszedlem do wniostu że mój sposób z dwoma tabelami chyba jest lepszy (poprawcie jeśli sie myle). Bo w tej tabeli co bede ją edytował i odejmował poszczególne sztuki, to zrobie tak, żeby gdy IloscSztuk bedzie rowna 0, to bede mu kazal usunac ten rekord. Wiec mysle ze przy szukaniu to bedzie szybciej dzialac, bo będą tylko dane ktore sa w magazynku, wiec stosunkowo mało. A jakbym zrobil jedna tabele z dwoma polami, to po roku bede mial ogromna liczbe rekordow, a po 10 latach ta liczba bedzie straznie WIELKA wiec wyszukiwanie i wypisywanie tych rekordow bedzie chyba znacznie wiecej czasu zajmowac. Moge zrobic zeby wyswietlal tylko te co maja powyzej 0, ale chyba i tak to bedzie dluzej. Jesli sie myle to prosze o korekte:)

Z góry dzieki.
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
A jakbym zrobil jedna tabele z dwoma polami, to po roku bede mial ogromna liczbe rekordow, a po 10 latach ta liczba bedzie straznie WIELKA wiec wyszukiwanie

A ile to dla Ciebie "ogromna"? Bo mysql radzi sobie nieźle z "ogromnymi" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
palixmp
post
Post #10





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 19.07.2006

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


Nie moge sobie poradzić z wyświetleniem dwuch pól w jednej liście rowijanej, czyli NazwyProduktu i NrFaktury. Kod moj to:

  1. <?php
  2. $rezultat1 = @mysql_query('SELECT NazwaArtykulu, NrFaktury FROM ARTYKULYBIUROWE');
  3. if (!$rezultat1) {
  4. '<p>Nie mozna pobrac listy Artykulówwydanych z bazy danych.</p>');
  5. } 
  6.  
  7.  //troche kodu któa nie jest istotna, rozpoczęcie formularza i takie tam
  8.  
  9.  while ($ARTYKULYWYDANE = mysql_fetch_array($rezultat1)) {
  10. $aname = htmlspecialchars($ARTYKULYWYDANE['NazwaArtykulu']);
  11.  
  12. echo "<option value='$aname'>$aname</option>n";
  13. }
  14. ?>


To oczywiście fragment. I nie wiem co wpisać w miejsce:
  1. <?php
  2. $aname = htmlspecialchars($ARTYKULYWYDANE['NazwaArtykulu']);
  3. ?>


Wpisałem ['NazwaArtykulu'.'NrFaktury'], potem ['NazwaArtykulu'].['NrFaktury'] i pare jeszcze możliwości i albo mi wyświetla błąd, albo w liście rozwijanej nie pokazuje nic.

Prosze o pomoc. Z góry dzieki:)

Ten post edytował palixmp 22.09.2006, 19:43:14
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2. $aname = htmlspecialchars($ARTYKULYWYDANE['NazwaArtykulu'].$ARTYKULYWYDANE['NrFaktury']);
  3. ?>
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: 22.08.2025 - 17:31