![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam taki mini problem.
Dodaję sobie listę użytkowników z adresami email. W bazie przechowuję oddzielnie adresy email (z innymi danymi), a oddzielnie dane danego użytkownika (wraz z innymi danymi). Struktura w uproszczeniu wygląda tak: USR (ID, NAME ....) USR_MAILS (USR_ID, EMAIL ....) (USR_ID wskazuje na tablę USR pole ID ![]() Teraz chciałbym aby dodawanie użytkowników przebiegało w możliwie jak najmniejszej liczbie zapytań. Co do samego INSERT dla USR to sprawa jest prosta (w uproszczeniu):
Natomiast dodawania maili do USR_MAILS w jednym zapytaniu już nie potrafię stworzyć. Mam 2 rozwiązania: 1. Iterując po odbiorcach mogę tworzyć INSERT ... SELECT dla USR_MAILS i podawać w parametrze nazwę 2. Pobierać lastInsertId, i dodawać do drugiego zapytania (jednak wtedy pierwsze zapytanie musiałoby być oddzielnie dla każdego wpisu) Macie może pomysły na jakieś inne rozwiązanie? Jest jakaś opcja INSERT wraz z JOIN? Bo jak na razie mam 1 zapytanie dla USR i n zapytań dla USR_MAILS lub n zapytań dla USR i jedno zapytanie dla USR_MAILS. Ten post edytował vokiel 15.10.2009, 09:47:34 -------------------- |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 444 Pomógł: 79 Dołączył: 26.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
To już mam w rozwiązaniach które podałem na końcu. Dążyłem do tego, żeby ogarnąć to w 2 zapytania, a nie ilość_usr +1 ;> -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 444 Pomógł: 79 Dołączył: 26.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
sorry zle zrozumialem, w takiej sytuacji pozostaje chyba tylko stworzenie widoku i na nim robienie insertow
-------------------- |
|
|
![]() ![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 352 Pomógł: 53 Dołączył: 10.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
ale chodzi Ci o to, żeby w PHP mieć jedno zapytanie? Bo przecież wydajnościowo Twoje jedno zapytanie jest takie samo jak x insertów. Jeżeli chcesz mieć jedno zapytanie w php to zrób to cursorem na przekazanych danych
//edit chodzi o to, żeby w MySQL napisać funkcję do której przekażaesz dane a w samej funkcji przetworzysz je jak arraya normalnego (przez coś ala split) i przelecisz w pętli po danych Ten post edytował jmail 15.10.2009, 10:43:51 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Tak sobie teraz myślę, że szkoda zachodu. Jeśli nie będzie konieczności dodawania tysięcy wpisów na raz zostanie na sposobie z lastinsertid.
Możliwość z widokiem po dodaniu triggera załatwiłaby sprawę. Dodać wpis razem (usr + usr_email) a następnie trigger na takiego inserta, który by to rozdzielił na dwie tabele. Jednak takie rozwiązanie wymaga więcej pracy, i wątpię czy będzie wydajniejsze... Dzięki za pomysły ![]() Ten post edytował vokiel 15.10.2009, 11:13:22 -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 21:16 |