Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Insert z Selectem z jednej tabeli
jajcarzd1
post
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Witam

Mam pewien mały problem. Otóż mam tabelę stany o strukturze jak poniżej. Baza mysql 5


ID IDPRODUKT IDROZMIAR STAN
1 5 1 10
2 5 2 5
3 6 1 2
4 6 2 3


Teraz dodaję nowy rozmiar i dodaję rekordy dla każdego produktu z id nowego rozmiaru ze stanem zero czyli


ID IDPRODUKT IDROZMIAR STAN
5 5 3 0
6 6 3 0


Generalnie nie jest to jakiś problem pobrać id i potem dla nich stworzyć nowe rekordy ale chciałbym to zrobić bez pośredniego operowania w php a uzyskać wynik w jednym zapytaniu czyli coś w stylu

INSERT into stany VALUES('',idprodukt,nowy_idrozmiar,0) SELECT idprodukt FROM stany group BY idprodukt.

Oczywiście to zapytanie jest błędne ale chodziło mi o nakreślenie tego czego oczekuję. Poza tym nie wiem czy w jednym zapytaniu gdzie jest INSERT i SELECT operujący na tej samej tabeli możliwe jest takie rozwiązanie

Jeśli ktoś miałby jakieś sugestie byłbym wdzięczny za info
Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
kefirek
post
Post #2





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Zobacz może tak
  1. INSERT INTO stany (idprodukt, nowy_idrozmiar) SELECT idprodukt,nowy_idrozmiar FROM stany;


Albo

  1. INSERT INTO stany (idprodukt,nowy_idrozmiar,0) VALUES('SELECT idprodukt FROM stany', 'nowy_idrozmiar', '0');


Ten post edytował kefirek 10.01.2009, 12:23:23
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(kefirek @ 10.01.2009, 14:19:46 ) *
Zobacz może tak
  1. INSERT INTO stany (idprodukt, nowy_idrozmiar) SELECT idprodukt,nowy_idrozmiar FROM stany;


Albo

  1. INSERT INTO stany (idprodukt,nowy_idrozmiar,0) VALUES('SELECT idprodukt FROM stany', 'nowy_idrozmiar', '0');


Nie no coś takiego nie ma racji bytu. Po pierwsze w tym drugim zapytaniu nazwa kolumny rozmiaru to będzie idrozmiar a nie nowy_idrozmiar. Nowy_idrozmiar to tylko wartość, natomiast w VALUES nie odpalisz podzapytania, a w apostrofach to będzie ttaktowane jako ciąg a nie zapytanie. Poza tym w taki sposób to by select zwrócił wszystkie idki produktu dla jednego wiersza
Go to the top of the page
+Quote Post
BaN
post
Post #4





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


Po zapisaniu nowego rozmiaru odczytujesz jego identyfikator ($id_rozmiar = ...)
Następnie wykonujesz zapytanie, które doda odpowiednie rekordy dla każdego produktu (zakładam, że tabela z danymi o produktach nazywa się `produkty`)
  1. <?php
  2. $query = 'INSERT INTO `stany` (idprodukt, idrozmiar, stan) VALUES '
  3.    . 'SELECT idprodukt,' . $id_rozmiar . ',0 FROM `produkty`';
  4. ?>


Ten post edytował BaN 10.01.2009, 13:03:05
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #5





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(BaN @ 10.01.2009, 14:50:07 ) *
Po zapisaniu nowego rozmiaru odczytujesz jego identyfikator ($id_rozmiar = ...)
Następnie wykonujesz zapytanie, które doda odpowiednie rekordy dla każdego produktu (zakładam, że tabela z danymi o produktach nazywa się `produkty`)
  1. <?php
  2. $query = 'INSERT INTO `stany` (idprodukt, idrozmiar, stan) VALUES '
  3.    . 'SELECT idprodukt,' . $id_rozmiar . ',0 FROM `produkty`)';
  4. ?>


No w sumie żeby ominąć problem z wykorzystanie tej samej tabeli to fakt moge pobrać idiki produktów z tabeli produkty i w sumie wtedy to będzie działać choć działające zapytanie będzie wyglądać tak

  1. <?php
  2. $query = 'INSERT INTO stany (idprodukt, idrozmiar, stan) SELECT idprodukt,'$id_rozmiar',0 FROM produkty';
  3. ?>


Z tym że bardziej chodziło mi oto czy można operując na tej samej tabeli dokonać takiego zapytania. Tak z ciekawości
Go to the top of the page
+Quote Post
sowiq
post
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Cytat(jajcarzd1 @ 10.01.2009, 13:05:42 ) *
Z tym że bardziej chodziło mi oto czy można operując na tej samej tabeli dokonać takiego zapytania. Tak z ciekawości
Nie, ponieważ podczas wykonywania instrukcji INSERT tabela, na której operujesz, jest blokowana. Z tego powodu nie jest możliwe wykonanie SELECT dopóki INSERT nie zakończy działania (nie zwolni blokady).
Czyli nie da się budować podzapytań w przedstawiony przez Ciebie na początku sposób (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował sowiq 10.01.2009, 13:27:46
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #7





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(sowiq @ 10.01.2009, 15:27:04 ) *
Czyli nie da się budować podzapytań w przedstawiony przez Ciebie na początku sposób (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


No i na taką konstruktywną odpowiedź liczyłem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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 - 15:50