Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: INSERT INTO i błąd z subQuery
Forum PHP.pl > Forum > Bazy danych > MySQL
wujek2009
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?
phpion
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.
mmmmmmm
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ć.
wujek2009
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.
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.