Skocz do zawartości

Wstawianie przez INSERT z polami innej tabeli


Makary155

Rekomendowane odpowiedzi

Mam 2 tabele: messages i users. Tabela messages ma pola: id, owner, subject i body. Do tej tabeli chcę dodać wiele rekordów gdzie pola subject i body mają jakąś tam określoną wartość, natomiast wartość pól owner pobierana byłaby po kolei z pola id z tabeli users.

Czyli jeśli w tabeli users 5 rekordów o id 1,2,3,4,5 to w tabeli messages utworzyły by się 5 rekordów:

owner: 1 subject: "blah" message:"omg"

owner: 2 subject: "blah" message:"omg"

owner: 3 subject: "blah" message:"omg"

owner: 4 subject: "blah" message:"omg"

owner: 5 subject: "blah" message:"omg"

 

 

Czy da się to zrobić jednym poleceniem INSERT ? Zależy mi o jak najwydajniejszej instrukcji gdyż planuję operować na dużej ilości rekordów. Pobieranie po kolei SELECTem i użycie INSERTa po kolei w php w pętli while jest za wolne i szukam innego rozwiązania. Czytałem o INSERT...SELECT ale to działa tylko jeżeli wstawia się tylko wynik selecta jesli dobrze to zrozumiałem, a ja mam do wstawienia oprócz tego inne rzeczy.

Odnośnik do komentarza
Udostępnij na innych stronach

Wykminiłem takie coś:

 

INSERT INTO messages (owner, subject, body) SELECT id, "lol", "omg" FROM users

 

Działa perfekcyjnie, chociaż nie wiem dlaczego. W znalezionym na Stack Overflow podobnym problemie polecono użycie UNION ale w moim przypadku nie działa, zwraca błąd "Doesn't match number of columns in row 1"

http://stackoverflow.com/questions/5366814...ws-using-select

 

SELECT "omglol" from users zwraca tyle razy napis omglol ile jest rekordów w tabeli, ciekawe.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...