Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Insert z Selectem z jednej tabeli
Forum PHP.pl > Forum > Bazy danych
jajcarzd1
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
kefirek
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');
jajcarzd1
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
BaN
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. ?>
jajcarzd1
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
sowiq
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 smile.gif
jajcarzd1
Cytat(sowiq @ 10.01.2009, 15:27:04 ) *
Czyli nie da się budować podzapytań w przedstawiony przez Ciebie na początku sposób smile.gif


No i na taką konstruktywną odpowiedź liczyłem smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.