Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z łaczeniem tabel
tmk7
post 8.12.2009, 13:25:14
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 18.06.2009

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


Witajcie

Mam dwie tabele users1 i domeny. Potrzebuje wprowadzić wartości z pola kat_bazowy z tabeli domeny do tabeli users1. Próbuje na sposób podany niżej:

Insert into users1 (kat_bazowy) SELECT domeny.kat_bazowy FROM users2 INNER JOIN domeny ON users2.domain_id = domeny.id order by users2.user_id;

Dane z wybranego pola są faktycznie dodawane do tabeli users1, ale nie odpowiednio wg klucza tylko na koncu po dotychczasowym ostatnim rekordzie w tabeli users1.
Klucz primary jest w obu tabelach zdefiniowany - users2.domain_id = domeny.id.
W którym miejscu popelniam błąd?

Pozdrawiam
Go to the top of the page
+Quote Post
Mchl
post 8.12.2009, 13:38:00
Post #2





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

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


Nowe wiersze zawsze są wstawiane na końcu tabeli. Nic z tym nie zrobisz.

Może raczej potrzebujesz UPDATE a nie INSERT ?
Go to the top of the page
+Quote Post
piotrooo89
post 8.12.2009, 13:47:25
Post #3


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




czemu tu:

  1. SELECT domeny.kat_bazowy FROM users2


masz users2 jak pobierasz z domeny?


--------------------
Go to the top of the page
+Quote Post
Mchl
post 8.12.2009, 13:48:20
Post #4





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

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


Ma domeny za INNER JOIN.
Go to the top of the page
+Quote Post
piotrooo89
post 8.12.2009, 13:49:53
Post #5


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




to nie powinno być tak:

  1. SELECT domeny.kat_bazowy FROM domeny INNER JOIN users2 ON users2.domain_id = domeny.id ORDER BY users2.user_id;


--------------------
Go to the top of the page
+Quote Post
Mchl
post 8.12.2009, 13:53:44
Post #6





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

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


A co za różnica? INNER JOIN jest przemienny.
Go to the top of the page
+Quote Post
tmk7
post 8.12.2009, 14:01:02
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 18.06.2009

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


Nie dopisałem jeszcze, że tabela users2 to kopia users1.

Zgadza się, oba polecenia są poprawne i zwracaja to samo. Problem jest natomiast w kwestii dodawania rekordów odpowiednio względem klucza. INSERT dodaje na koncu a UPDATE daje tylko jeden rekord:

  1. --------------
  2. UPDATE users1 SET kat_bazowy=(SELECT domeny.kat_bazowy FROM users2 INNER JOIN domeny ON users2.domain_id = domeny.id ORDER BY users2.user_id)
  3. --------------
  4.  
  5. ERROR 1242 (21000): Subquery returns more than 1 row


No chyba że przekombinowałem cos w poleceniu
Go to the top of the page
+Quote Post
Mchl
post 8.12.2009, 14:05:02
Post #8





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

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


Kod
UPDATE users1 INNER JOIN users2 ON users1.user_id = users2.user_id INNER JOIN domeny ON users2.domain_id = domeny.id SET users1.kat_bazowy = domeny.kat_bazowy


Ten post edytował Mchl 8.12.2009, 14:05:39
Go to the top of the page
+Quote Post
tmk7
post 5.05.2010, 14:30:18
Post #9





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 18.06.2009

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


Świetnie, działa.

Dzieki

  1. UPDATE users1 INNER JOIN users2 ON users1.user_id = users2.user_id INNER JOIN domeny ON users2.domain_id = domeny.id SET users1.kat_bazowy = domeny.kat_bazowy


Jakby to polecenie wyglądało jakby user1 było w bazie db1, user2 w bazie db2 a domeny w bazie db3?
Go to the top of the page
+Quote Post
phpion
post 5.05.2010, 14:32:30
Post #10





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




nazwa_bazy.nazwa_tabeli.nazwa_pola

ale czy można zrobić UPDATE na kilku bazach to nie wiem - musisz sprawdzić sam.

Ten post edytował phpion 5.05.2010, 14:33:18
Go to the top of the page
+Quote Post
Mchl
post 5.05.2010, 16:22:41
Post #11





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

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


Można, a w każdym razie nic nie wskazuje na to by nie można było. Tabela to tabela.
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: 23.06.2025 - 03:43