Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> INSERT INTO i błąd z subQuery, prawdpodobnie wina triggerów (?)
wujek2009
post
Post #1





Grupa: Zarejestrowani
Postów: 350
Pomógł: 31
Dołączył: 23.05.2010

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


Cześć.

Podczas insertowania danych do tabeli użytkowników wyrzuca mi następujący błąd:
Kod
Subquery returns more than 1 row [ INSERT INTO `users` (.........) VALUES (.....)


Samo zapytanie INSERT nie posiada w sobie żadnych elementów podzapytań - ostatnio próbowałem swoich sił w budowaniu triggerów i tutaj podejrzewam, że błąd leży.
W tej chwili mam zdefiniowane trzy triggery: dwie akcje przy INSERT, jedna przy DELETE.

  1. CREATE TRIGGER user_registertime
  2. before INSERT ON users
  3. FOR each row
  4. begin
  5. IF ( new.date_registered IS NULL OR new.date_registered = 0 )
  6. then
  7. SET new.date_registered = UNIX_TIMESTAMP();
  8. end IF;
  9. end;
  10.  
  11. CREATE TRIGGER user_updateconfig
  12. after INSERT ON users
  13. FOR each row
  14. begin
  15. IF ( SELECT value FROM `configuration` WHERE variable = 'EMAIL_USER_ACCOUNT_ACTIVE' < '1' )
  16. then
  17. UPDATE `configuration` SET value = (value + 1) WHERE variable = 'COUNT_ALL_USERS';
  18. end IF;
  19. end;
  20.  
  21. CREATE TRIGGER user_deleteconfig
  22. after DELETE ON users
  23. FOR each row
  24. begin
  25. UPDATE `configuration` SET value = (value - 1) WHERE variable = 'COUNT_ALL_USERS';
  26. end;


Zastanawiam się nad tą regułką pobierania z tabeli "configuration" - czy dobrze to zrealizowałem - ogólnie na sto procent zwracany jest jeden rekord - value zwraca cyfrę - zero lub jedynkę.

Gdzie może być błąd?
Go to the top of the page
+Quote Post
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Masz jasno napisane: podzapytanie zwraca więcej niż 1 rekord, a pewnie do jakiegoś pola przypisujesz wartość z podzapytania. Musisz dodać LIMIT 1 do podzapytania by zwróciło maksymalnie 1 wynik.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #3





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Strzelam że to linia 15. Jest bezsensowna. I dziwię się, że w ogóle działa. Chociaż skoro to MySQL, to można się wielu niespodzianek spodziewać.
Go to the top of the page
+Quote Post
wujek2009
post
Post #4





Grupa: Zarejestrowani
Postów: 350
Pomógł: 31
Dołączył: 23.05.2010

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


Ogólnie samo w sobie zapytanie:
  1. SELECT value FROM `configuration` WHERE variable = 'EMAIL_USER_ACCOUNT_ACTIVE' < '1'
zwraca i tak jeden rekord - nie mam więcej wartości z identyfikatorem "EMAIL_USER_ACCOUNT_ACTIVE" - ale.. dodanie limit 1 rozwiązało problem.

Jak inaczej można zapisać pobieranie z innej tabeli w triggerze? Taki przykład właściwie znalazłem w sieci.

Ten post edytował wujek2009 4.11.2013, 22:18:04
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 Aktualny czas: 21.08.2025 - 02:02