Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> #1172 - Result consisted of more than one row, jak pozbyć się błędu
jason300
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 26.11.2012

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


Witam mam taki mały problem po migracji z serwera windowsowego na centosa z bazy mysql 5.5.16 do 5.5.28 zapytanie które działało prawidłowo zaczyna mi zwracać błąd #1172 - Result consisted of more than one row , prosiłbym o pomoc co mam zrobić żeby to zapytanie działało prawidłowo , oczywiście próbowałem w różnych miejscach wstawić limit 1 lecz nie interesuje mnie to żeby wyświetlało tylko jeden rekord lecz wszystkie (około 600 ) co robi pomyślnie na windowsie a na centosie już nie .


  1. SELECT *,getparentname_bytype(unit.id, 1)
  2. AS spolka , getparentid_bytype(unit.id, 1)
  3. AS spolka_id, getparentname_bytype(unit.id, 2)
  4. AS pion, getparentname_bytype(unit.id, 3)
  5. AS departament, get_przelozony(unit.id) AS przelozony, get_przelozony_email(unit.id)
  6. AS przelozony_email, email, unit.name
  7. AS "stanowisko"
  8. FROM unit
  9. LEFT JOIN employeeunit ON unit.id = employeeunit.unit_id
  10. LEFT JOIN employee ON employeeunit.employee_id = employee.id WHERE unittype_id=5
  11. AND lastname<>""
  12. AND getparentid_bytype(unit.id, 1)=2184
  13. ORDER BY spolka
  14. DESC, lastname


a tutaj mam poszegolne funkcje najpierw getparentid_bytype
  1. FUNCTION `getparentid_bytype`(id1 int(11), tp int(11)) RETURNS int(11)
  2. BEGIN
  3.  
  4. SET @parent_id = id1, @fuse = 1, @name1="", @unittype_id=0;
  5. petla: while 1 do
  6. SELECT parent_id, unittype_id, name
  7. INTO @parent_id1, @unittype_id, @name1
  8. FROM unit
  9. WHERE id=@parent_id;
  10. IF @unittype_id = tp AND @parent_id<>id1 AND @fuse>1
  11. THEN
  12. LEAVE petla;
  13. END IF;
  14. SET @parent_id=@parent_id1;
  15. IF @parent_id=22 THEN SET @name1=""; LEAVE petla; END IF;
  16. SET @fuse = @fuse + 1;
  17. IF @fuse > 100 THEN LEAVE petla; END IF;
  18. END WHILE petla;
  19. RETURN @parent_id;


getparentname_bytype

  1. FUNCTION `getparentname_bytype`(id1 int(11), tp int(11)) RETURNS varchar(255) CHARSET cp1250
  2. BEGIN
  3.  
  4. SET @parent_id = id1, @fuse = 1, @name1="", @unittype_id=0;
  5. petla: while 1 do
  6. SELECT parent_id, unittype_id, name
  7. INTO @parent_id1, @unittype_id, @name1
  8. FROM unit
  9. WHERE id=@parent_id;
  10. IF @unittype_id = tp AND @parent_id<>id1 AND @fuse>1
  11. THEN
  12. LEAVE petla;
  13. END IF;
  14. SET @parent_id=@parent_id1;
  15. IF @parent_id=22 THEN SET @name1=""; LEAVE petla; END IF;
  16. SET @fuse = @fuse + 1;
  17. IF @fuse > 100 THEN LEAVE petla; END IF;
  18. END WHILE petla;
  19. RETURN @name1;


i oczywiscie getprzelozony_mail
  1. FUNCTION `get_przelozony_email`(id1 int(11)) RETURNS varchar(255) CHARSET cp1250
  2. BEGIN
  3.  
  4. SET @parent_id = id1, @fuse = 1, @name1="", @unittype_id=0;
  5. petla: while 1 do
  6.  
  7. SELECT parent_id, unittype_id, unit.id, name, employee.lastname, employee.firstname, employee.id,email
  8. INTO @parent_id, @unittype_id, @id, @name1, @lastname, @firstname, @eid, @email
  9. FROM unit
  10. LEFT JOIN employeeunit ON unit.id = employeeunit.unit_id
  11. LEFT JOIN employee ON employeeunit.employee_id = employee.id
  12. WHERE unit.id=@parent_id ;
  13. IF @unittype_id = 5 AND @id<>id1 AND @lastname<>'' THEN LEAVE petla; END IF;
  14. IF @parent_id=22 THEN SET @name1=""; LEAVE petla; END IF;
  15. SET @fuse = @fuse + 1;
  16. IF @fuse > 100 THEN LEAVE petla; END IF;
  17. END WHILE petla;
  18. RETURN concat(@email)
  19. END */;;


po namyśle wydaje się że jednak pominąłem jedną funkcję i na 100 procent to ona jest problematyczna

  1. BEGIN
  2.  
  3.  
  4. SET @parent_id = id1, @fuse = 1, @name1="", @unittype_id=0;
  5.  
  6. petla: while 1 do
  7.  
  8. SELECT parent_id, unittype_id, unit.id, name, employee.lastname, employee.firstname
  9. INTO @parent_id, @unittype_id, @id, @name1, @lastname, @firstname
  10. FROM unit
  11. LEFT JOIN employeeunit ON unit.id = employeeunit.unit_id
  12. LEFT JOIN employee ON employeeunit.employee_id = employee.id
  13. WHERE unit.id=@parent_id ;
  14. IF @unittype_id = 5 AND @id<>id1 AND @lastname<>'' THEN LEAVE petla; END IF;
  15. IF @parent_id=22 THEN SET @name1=""; LEAVE petla; END IF;
  16.  
  17. SET @fuse = @fuse + 1;
  18. IF @fuse > 100 THEN LEAVE petla; END IF;
  19. END WHILE petla;
  20.  
  21. RETURN concat(@id,' ',@firstname, ' ',@lastname);
  22.  
  23. END


ok temat rozwiązany dodanie limit 1 w dwóch ztych funkcji po select into ..... where ... spowodowało że wszystko zaczęło działać pozdrawiam

Ten post edytował jason300 14.01.2013, 15:25:13
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
wiiir
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


Cytat(jason300 @ 14.01.2013, 10:39:39 ) *
ok temat rozwiązany dodanie limit 1 w dwóch ztych funkcji po select into ..... where ... spowodowało że wszystko zaczęło działać pozdrawiam


moze i dziala.. ale przypuszczam ze zle.. bo zapytania w funkcjach zapewne zwracaja ci wiecej niz 1 rekord a ty na chama powiedziales ze wiecej nie chcesz? Compilator to łyka.. ale to napewno chodzi ci o uzyskanie dokladnie 1 rekordu badz czy nie chcesz obsluzyc wszystkich wynikow?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 14:16