Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie: dodanie do bazy rekordu i automatyczne tworzenie odpowiedniej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
infrat
Witam.

Potrzebuję sugestii co do sposobu przygotowania bazy w ten sposób, by po dodaniu do odpowiedniej tabeli nowego rekordu, automatycznie tworzyła się w bazie nowa tabela, której nazwą byłaby wartość jednego z pól wcześniej dodanego rekordu.

Jakiś pomysł? Czy istnieje w ogóle możliwość stworzenia takiego powiązania, czy pozostaje jedynie przesłanie oddzielnie INSERT'a i CREATE TABLE?
Myślałem o triggerach, ale one podobno nie umożliwiają tworzenia nowych tabel.

Pozdrawiam.
trafas
możesz skorzystać z triggera, a w nim odapalać wcześniej przez ciebie odpowiednio spreparowane zapytanie za pomocą funkcji execute

Przykład:

  1.  
  2. declare @zapytanie varchar(255)
  3.  
  4. SET @zapytanie = 'create table .....'
  5.  
  6. execute(@zapytanie)
  7.  
infrat
Cytat(trafas @ 24.06.2012, 11:04:58 ) *
możesz skorzystać z triggera, a w nim odapalać wcześniej przez ciebie odpowiednio spreparowane zapytanie za pomocą funkcji execute

Przykład:

  1.  
  2. declare @zapytanie varchar(255)
  3.  
  4. SET @zapytanie = 'create table .....'
  5.  
  6. execute(@zapytanie)
  7.  


Twoja propozycja jest zgodna z MySQL? Bo z tego co manual mówi to MySQL używa nieco innej składni dla execute (mnie w każdym razie się wysypuje błąd składni przy próbie zaimplementowania Twojego rozwiązania). Vide -> http://dev.mysql.com/doc/refman/5.0/en/sql...statements.html

Ale nawet idąc tym tropem, po przerobieniu tego na składnię zgodną z MySQL, dostaję błąd: "ERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger"

Mój kod w tym przypadku wygląda tak:

  1. delimiter |
  2.  
  3. CREATE TRIGGER test BEFORE INSERT ON users
  4. FOR EACH ROW BEGIN
  5. SET @TABLE = 'tabela';
  6. SET @q = CONCAT('create table ',@TABLE);
  7. prepare stmt1 FROM @q;
  8. execute stmt1;
  9. END;
  10. |
Niktoś
Cytat
SQL prepared statements (PREPARE, EXECUTE, DEALLOCATE PREPARE) can be used in stored procedures, but not stored functions or triggers. Thus, stored functions and triggers cannot use dynamic SQL (where you construct statements as strings and then execute them).

Dziwne ,kolega wyżej pisał pewnie w MSSQL , bo tam w trigerach można używać dynamicznego języka SQL w MySql jak jest napisane to nie można.
infrat
Dzięki za odpowiedź.

Wychodzi na to, że nie pozostaje mi nic innego jak przeprojektowanie bazy i zrobienie relacji "jak Pan Bóg przykazał".
No chyba, że ktoś ma jakiś inny pomysł?

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.