Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie MySQL - użytkownicy, którzy mają w sumie minimum 50 słów i przynajmniej jedno ze słów stanowi 25% wszystkich z nich
Forum PHP.pl > Forum > Bazy danych > MySQL
czeslavv
Witam,

Mam takie tabele, jak poniżej. Użytkownikom (userprofile_profile) są przypisane słowa (userprofile_word). Użytkownik może mieć wielokrotnie przypisane dane słowo. Potrzebuję wyciągnąć tych użytkowników, którzy mają w sumie minimum 50 słów i przynajmniej jedno ze słów stanowi 25% wszystkich słów danego użytkownika. Mam nadzieję, że dobrze to opisałem. Będę wdzięczny za pomoc.

  1. CREATE TABLE `userprofile_profile` (
  2. `id` int(11) NOT NULL,
  3. PRIMARY KEY (`id`)
  4. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  5.  
  6.  
  7. CREATE TABLE `userprofile_answer` (
  8. `id` int(11) NOT NULL AUTO_INCREMENT,
  9. `word_id` int(11) NOT NULL,
  10. `profile_id` int(11) NOT NULL,
  11. PRIMARY KEY (`id`),
  12. KEY `userprofile_answer_word_id` (`word_id`),
  13. KEY `userprofile_answer_profile_id` (`profile_id`),
  14. ) ENGINE=MyISAM AUTO_INCREMENT=84923 DEFAULT CHARSET=utf8;
  15.  
  16. CREATE TABLE `userprofile_word` (
  17. `id` int(11) NOT NULL AUTO_INCREMENT,
  18. `word` varchar(30) NOT NULL,
  19. PRIMARY KEY (`id`)
  20. ) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;
  21.  
artega
Głowy nie dam ale może to zapytanie podpowie właściwą odpowiedź
  1. SELECT userprofile_profile.*, COUNT(userprofile_answer.id) AS total
  2. FROM userprofile_profile
  3. JOIN userprofile_answer ON (userprofile_answer.profile_id = userprofile_profile.id)
  4. JOIN (SELECT profile_id, COUNT(word_id) AS total FROM userprofile_answer GROUP BY profile_id, word_id) AS c
  5. WHERE userprofile_profile.id = c.profile_id AND (c.total / total * 100) >= 25
  6. GROUP BY userprofile_profile.id
  7. HAVING total >= 50
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.