Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: oddzielanie przecinkiem wartości pobranych z tabeli wg argumentu
Forum PHP.pl > Forum > Bazy danych > MySQL
Arthast
Witam,

przysiadłem w końcu, aby na poważniej pouczyć się SQL'a i niestety za bardzo nie potrafię zrozumieć instancji jego działania - a manual jest strasznie nieczytelny (albo nie potrafię szukać - też taka możliwość może być);

Otóż mam taki problem, iż próbuje sobie napisać funkcję, która po podaniu id_filmu pobierze wszystkie do niego przypisane gatunki i wyświetli po przecinku

Model prezentuje się następująco:



A oto procedura, którą stworzyłem:
  1. DELIMITER $$
  2.  
  3. DROP FUNCTION IF EXISTS `dupa` $$
  4. CREATE DEFINER=`root`@`localhost` FUNCTION `dupa`(`idfilm` INT) RETURNS varchar(255) CHARSET latin1
  5. READS SQL DATA
  6. BEGIN
  7.  
  8.  
  9. DECLARE ile INT;
  10. DECLARE str VARCHAR(255);
  11. DECLARE zapytanie VARCHAR(255);
  12. DECLARE licznik INT;
  13. DECLARE licznik_dod INT;
  14.  
  15. SET licznik = 0;
  16. SET licznik_dod = 0;
  17.  
  18. SET ile = (SELECT count(*)
  19. FROM gatunki, film_gatunki
  20. WHERE film_gatunki.id_film = idfilm
  21. AND film_gatunki.id_gatunek = gatunki.id_gatunek);
  22.  
  23.  
  24.  
  25.  
  26. WHILE ile > licznik DO
  27.  
  28. SET licznik_dod = licznik_dod +1;
  29.  
  30. SET zapytanie = (SELECT gatunki.nazwa_gatunku INTO zapytanie
  31. FROM gatunki, film_gatunki
  32. WHERE film_gatunki.id_film =idfilm
  33. AND film_gatunki.id_gatunek = gatunki.id_gatunek
  34. LIMIT licznik,licznik_dod);
  35.  
  36.  
  37.  
  38. SET str = str & ', ' % zapytanie;
  39.  
  40. SET licznik = licznik + 1;
  41.  
  42. END WHILE;
  43.  
  44.  
  45.  
  46. RETURN str;
  47. END $$
  48.  
  49. DELIMITER ;


Procedurę wykonuje, tylko że wyrzuca NULL. Zmienna ile dostaje poprawna wartość.

Coś mi się wydaje, że zupełnie źle podchodzę do tego problemu.
sazian

  1. SELECT GROUP_CONCAT(nazwa_gatunku SEPARATOR ',') gatunki FROM film_gatunki fg
  2. JOIN gatunki g ON fg.id_gatunek=g.id_gatunek
  3. WHERE id_film=X
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.