Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][zapytanie]GROUP BY/podwójne odnoszenie się do jednej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
chmiello96
Jest 4 w nocy i się już poddaję :D

Nie mam pojęcia, czy tytuł jest adekwatny.

Mam następujące dane:

  1. user
  2. +---------+-----------+
  3. | user_id | user_name |
  4. +---------+-----------+
  5. | 1 | Kacper |
  6. | 2 | Bartek |
  7. | 3 | Kamil |
  8. | 4 | Bartek |
  9. +---------+-----------+
  10.  
  11. GROUP
  12. +----------+-------------+
  13. | group_id | group_title |
  14. +----------+-------------+
  15. | 1 | PHP |
  16. | 2 | C++ |
  17. | 3 | Pascal |
  18. +----------+-------------+
  19.  
  20. group_member
  21. +-----------------+-------------------+--------------------+
  22. | group_member_id | group_member_user | group_member_group |
  23. +-----------------+-------------------+--------------------+
  24. | 1 | 1 | 1 |
  25. | 2 | 1 | 2 |
  26. | 3 | 2 | 2 |
  27. | 4 | 2 | 3 |
  28. | 5 | 3 | 3 |
  29. | 6 | 3 | 1 |
  30. | 7 | 4 | 2 |
  31. +-----------------+-------------------+--------------------+


powiedzmy, że to baza danych szkolnego kółka informatycznego, które jest podzielone na 'sekcje'

Chodzi o to, by wyświetlić każdemu użytkownikowi z kim chodzi na konkretne zajęcia tematyczne w postaci:

  1. dla kacpra(id1)
  2. +--------------------+-----------+
  3. | group_member_group | user_name |
  4. +--------------------+-----------+
  5. | 1 | Kacper |
  6. | 1 | Kamil |
  7. | 2 | Kacper |
  8. | 2 | Bartek |
  9. | 2 | Eliasz |
  10. +--------------------+-----------+
  11.  
  12. dla bartka(id2)
  13. +--------------------+-----------+
  14. | group_member_group | user_name |
  15. +--------------------+-----------+
  16. | 2 | Kacper |
  17. | 2 | Bartek |
  18. | 2 | Eliasz |
  19. | 3 | Bartek |
  20. | 3 | Kamil |
  21. +--------------------+-----------+
  22.  
  23. dla kamila(id3)
  24. +--------------------+-----------+
  25. | group_member_group | user_name |
  26. +--------------------+-----------+
  27. | 3 | Bartek |
  28. | 3 | Kamil |
  29. | 1 | Kacper |
  30. | 1 | Kamil |
  31. +--------------------+-----------+
  32.  
  33. dla eliasza(id4)
  34. +--------------------+-----------+
  35. | group_member_group | user_name |
  36. +--------------------+-----------+
  37. | 3 | Kacper |
  38. | 3 | Bartek |
  39. | 3 | Eliasz |
  40. +--------------------+-----------+



Czy ktoś się podejmie i poratuje ? :3
mmmmmmm
  1. SELECT group_member_group, user_name FROM `group` g JOIN `group_member` gm ON `gm`.`group_member_user`=`g`.`user_id` WHERE `group_member_group` IN (SELECT `group_member_group` WHERE `group_member_user`=1 /*dla Kacpra*/)
chmiello96
  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 'WHERE `group_member_user`=1 /*dla Kacpra*/) LIMIT 0, 30' at line 1


Jeśli zapytanie będzie wyglądać następująco:

  1. SELECT group_member_group, user_name FROM `group` g JOIN `group_member` gm ON `gm`.`group_member_user`=`g`.`user_id` WHERE `group_member_group` IN (SELECT `group_member_group` FROM `group_member` WHERE `group_member_user`=1 /*dla Kacpra*/)


Otrzymuję błąd:

  1. #1054 - Unknown column 'user_name' in 'field list'


Nie wiem jak mógłbym coś tu naprawić ;_;

Zrzut bazy:


  1. --
  2. -- Baza danych: `BAZA`
  3. --
  4.  
  5. -- --------------------------------------------------------
  6.  
  7. --
  8. -- Struktura tabeli dla tabeli `group`
  9. --
  10.  
  11. CREATE TABLE IF NOT EXISTS `group` (
  12. `group_id` int(11) NOT NULL AUTO_INCREMENT,
  13. `group_title` varchar(256) NOT NULL,
  14. PRIMARY KEY (`group_id`)
  15. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
  16.  
  17. --
  18. -- Zrzut danych tabeli `group`
  19. --
  20.  
  21. INSERT INTO `group` (`group_id`, `group_title`) VALUES
  22. (1, 'PHP'),
  23. (2, 'C++'),
  24. (3, 'Pascal');
  25.  
  26. -- --------------------------------------------------------
  27.  
  28. --
  29. -- Struktura tabeli dla tabeli `group_member`
  30. --
  31.  
  32. CREATE TABLE IF NOT EXISTS `group_member` (
  33. `group_member_id` int(11) NOT NULL AUTO_INCREMENT,
  34. `group_member_user` int(11) NOT NULL,
  35. `group_member_group` int(11) NOT NULL,
  36. PRIMARY KEY (`group_member_id`)
  37. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
  38.  
  39. --
  40. -- Zrzut danych tabeli `group_member`
  41. --
  42.  
  43. INSERT INTO `group_member` (`group_member_id`, `group_member_user`, `group_member_group`) VALUES
  44. (1, 1, 1),
  45. (2, 1, 2),
  46. (3, 2, 2),
  47. (4, 2, 3),
  48. (5, 3, 3),
  49. (6, 3, 1),
  50. (7, 4, 2);
  51.  
  52. -- --------------------------------------------------------
  53.  
  54. --
  55. -- Struktura tabeli dla tabeli `user`
  56. --
  57.  
  58. CREATE TABLE IF NOT EXISTS `user` (
  59. `user_id` int(11) NOT NULL AUTO_INCREMENT,
  60. `user_name` varchar(256) NOT NULL,
  61. PRIMARY KEY (`user_id`)
  62. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
  63.  
  64. --
  65. -- Zrzut danych tabeli `user`
  66. --
  67.  
  68. INSERT INTO `user` (`user_id`, `user_name`) VALUES
  69. (1, 'Kacper'),
  70. (2, 'Bartek'),
  71. (3, 'Kamil'),
  72. (4, 'Bartek');
mmmmmmm
  1. SELECT group_member_group, user_name FROM `group` g JOIN `group_member` gm ON `gm`.`group_member_user`=`g`.`user_id` JOIN `user` u ON u.`user_id`=g.`user_id` WHERE `group_member_group` IN (SELECT `group_member_group` WHERE `group_member_user`=1 /*dla Kacpra*/)

Chyba da sie pozbyc jednej tabeli, ale teraz nie mam czasu.
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.