Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> default value jako inne pole
misty
post 3.08.2011, 12:52:39
Post #1





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


hej, czy jest mozliwe aby dla danego pola ustawic jako wartosc default value = inne pole?

normalnie jak chce dodac default value to wystarczy taki sql:

  1. ALTER TABLE test ALTER COLUMN name SET DEFAULT 'jakas wartosc'


a ja bym chciala cos takiego:
  1. ALTER TABLE test ALTER COLUMN name SET DEFAULT main_name


czyli za kazdym razem jak bede robila insert i nie podam wartosci dla 'name', to wstawi sie tam wartosc z pola 'main_name'


czy takie cos jest w ogole mozliwe?

pzdr,
misty




Go to the top of the page
+Quote Post
nospor
post 3.08.2011, 14:03:43
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




I tak i nie.

Nie nie jest możliwe.
Tak, jest możliwe tworząc trigger na tabeli, który będzie wypełnił drugie pole czym ci się zamarzy.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
misty
post 3.08.2011, 14:43:36
Post #3





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


ale z triggerem to jest chyba tak, ze ja nie moge zrobic 'trigger after insert' na tej samej tabeli? czyli jesli robie insert do tabeli A, to jest tak trigger wywolywany 'after insert'? to chyba musi byc wtedy tak, ze ten trigger moze byc wywolany ale na tabeli B? dobrze mysle? pamietam ze kiedys wlasnie mialam z tym problem i wyszlo ze nie moge na tej samej tabeli.. mozliwe ze to byl trigger na update, nie pamietam dokladnie.
Go to the top of the page
+Quote Post
nospor
post 3.08.2011, 14:49:52
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ale w triggerze będziesz robiła update. A trigger wywoływać masz na insert - więc chyba powinno być ok.

Ale to piszę chyba, bo sam nie jestem pewien a nie chce mi się sprawdzać smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mortus
post 3.08.2011, 15:26:01
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Niestety w ciele TRIGGERa nie można wykonywać zapytania zmieniającego zawartość tabeli (UPDATE, INSERT, itp.), która tego TRIGGERa wywołuje. Można natomiast przed wstawieniem nowych (NEW) wartości sprawdzić je i ewentualnie zmodyfikować:
  1. CREATE TRIGGER `check_field` BEFORE INSERT ON `table_name`
  2. FOR EACH ROW BEGIN
  3. IF `NEW`.`field2` IS NULL THEN
  4. SET `NEW`.`field2` = `NEW`.`field1`;
  5. END IF;
  6. END;


Ten post edytował mortus 3.08.2011, 15:30:43
Go to the top of the page
+Quote Post
nospor
post 3.08.2011, 15:30:02
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tak czy siak trigger pozostaje wink.gif
Dzięki mortus za dokładniejsze wyjaśnienie. Jak już pisałem z triggerów nie jestem zbyt pewny smile.gif - za rzadko ich używam.
Powód edycji: [nospor]:


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mortus
post 3.08.2011, 15:38:23
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Proszę bardzo. Kiedyś miałem z tym problem, to teraz już wiem.
Innego sposobu na rozwiązanie problemu nie ma, chyba że w PHP lub tym podobnym.
Pozdrawiam smile.gif

Ten post edytował mortus 3.08.2011, 15:40:24
Go to the top of the page
+Quote Post
misty
post 4.08.2011, 06:31:35
Post #8





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


mortus, probowalam wykonac tego trigger'a aby zobaczyc jak to dzialac bedzie i czy mi to wystarczy, ale Twoj sql jest bledny. Niestety na takim triggerze:

  1. CREATE TRIGGER check_field BEFORE INSERT ON test
  2. FOR EACH
  3. ROW BEGIN
  4. IF NEW.test_id2 IS NULL
  5. THEN
  6. SET NEW.test_id2 = NEW.test_id


phpmyadmin mowi mi:
  1. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6


ten blad to mi sie kojarzy z apostrofami, no ale je usunelam.. ja sie na triggerach za bardzo nie znam, ale z tego co pamietam to wyglada mi to na ok sql'a, dlatego nie mam za bardzo pomyslu co tu moze byc nie tak. A moze Tobie rzuca sie cos w oczy?

pzdr
Go to the top of the page
+Quote Post
mortus
post 4.08.2011, 06:38:26
Post #9





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Brakuje END IF i END, a także średnika ;:
  1. CREATE TRIGGER check_field BEFORE INSERT ON test
  2. FOR EACH
  3. ROW BEGIN
  4. IF NEW.test_id2 IS NULL
  5. THEN
  6. SET NEW.test_id2 = NEW.test_id;
  7. END IF;
  8. END;


EDIT
No i wyżej nie użyłem apostrofów, tylko gravisów (`).

Ten post edytował mortus 4.08.2011, 06:50:35
Go to the top of the page
+Quote Post
misty
post 4.08.2011, 07:27:59
Post #10





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


z END probowalam bo kojarzylam ze powinno byc, ale nie pamietalam o END IF. Niemniej jednak, phpmyadmin caly czas sie czepia!

dostaje:
  1. Zapytanie SQL:
  2.  
  3. CREATE TRIGGER check_field BEFORE INSERT ON test
  4. FOR EACH
  5. ROW BEGIN
  6. IF NEW.test_id2 IS NULL
  7. THEN
  8. SET NEW.test_id2 = NEW.test_id;
  9.  
  10.  
  11. MySQL zwrócił komunikat:
  12.  
  13. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6
  14.  


i krzyzyk mi stawia pomiedzy linijkami
IF NEW.test_id2 IS NULL
THEN


Nie mam pojecia dlaczego tak jest, moze to wina phpmyadmin? Niestety nie mam dostepu przez konsole do mysql'a, mam wystawiony dostep jedynie przez phpmyadmin..
Go to the top of the page
+Quote Post
mortus
post 4.08.2011, 10:51:39
Post #11





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


No tak. W phpMyAdminie trzeba jeszcze użyć DELIMITERa:
  1. DELIMITER |
  2. CREATE TRIGGER `check_field` BEFORE INSERT ON `test` FOR EACH ROW BEGIN
  3. IF `NEW`.`test_id2` IS NULL THEN
  4. SET `NEW`.`test_id2` = `NEW`.`test_id`;
  5. END IF;
  6. END;
  7. |
  8. DELIMITER ;


Ten post edytował mortus 4.08.2011, 10:55:27
Go to the top of the page
+Quote Post
misty
post 4.08.2011, 10:58:33
Post #12





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


dokladnie o to mi chodzilo, dzieki wielkie!!
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: 14.08.2025 - 13:31