Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyświetlenie rekordów podobnych - jak?
pitbull82
post
Post #1





Grupa: Zarejestrowani
Postów: 167
Pomógł: 0
Dołączył: 30.04.2004
Skąd: Częstochowa

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


Witam

Mam problem, nie bardzo wiem jak go rozwiązać. Mam w bazie użytkowników. Każdy użytkownik powiedzmy że może określić 10 cech - każda z cech ma do 50 opcji np. 1,2,3,4, ... 50. Chciałbym móc wyświetlić użytkowników, którzy mają jak najwięcej takich cech jak ja, najpierw tych którzy mają 10 identycznych, potem 9, potem 8 itd. Pytanie czy da się jakoś sensownie to przechować w tabeli żeby móc sortować w locie w mysqlu tabele czy może trzeba coś bardziej skomplikowanego wymyślić? Macie jakiś pomysł na rozwiązanie tego problemu?

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pitbull82
post
Post #2





Grupa: Zarejestrowani
Postów: 167
Pomógł: 0
Dołączył: 30.04.2004
Skąd: Częstochowa

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


Powiem szczerze, ze szukałem co nieco, ale nie znalazłem nic ciekawego. Nie wiem poza tym, czy się dobrze zrozumieliśmy, więc teraz wrzucam przykładowy schemat bazy danych

  1. CREATE TABLE `answers` (
  2. `a_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `a_id_user` int(11) NOT NULL,
  4. `answer_1` tinyint(4) NOT NULL,
  5. `answer_2` tinyint(4) NOT NULL,
  6. `answer_3` tinyint(4) NOT NULL,
  7. `answer_4` tinyint(4) NOT NULL,
  8. `answer_5` tinyint(4) NOT NULL,
  9. `answer_6` tinyint(4) NOT NULL,
  10. `answer_7` tinyint(4) NOT NULL,
  11. `answer_8` tinyint(4) NOT NULL,
  12. PRIMARY KEY (`a_id`)
  13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
  14.  
  15. --
  16. -- Zrzut danych tabeli `answers`
  17. --
  18.  
  19. INSERT INTO `answers` (`a_id`, `a_id_user`, `answer_1`, `answer_2`, `answer_3`, `answer_4`, `answer_5`, `answer_6`, `answer_7`, `answer_8`) VALUES
  20. (1, 1, 1, 2, 3, 4, 3, 2, 1, 1),
  21. (2, 2, 1, 3, 4, 1, 1, 4, 3, 3),
  22. (3, 3, 1, 4, 3, 2, 1, 4, 1, 1),
  23. (4, 4, 2, 3, 4, 3, 2, 1, 1, 1),
  24. (5, 5, 1, 1, 1, 1, 3, 2, 1, 1);


Chciałbym wyświetlić te rekordy, które pola answer_1 ... answer_8 mają jak najbardziej zbliżone do rekordu o danym a_id_user. Patrząc na dane jeśli szukamy rekordów "podobnych" do rekordu użytkownika 1, to użytkownik 2 ma tylko 1 pole podobne (answer_1), użytkownik 3 ma 4 pola podobne (answer_1, answer_3,answer_7,answer_8), użytkownik 4 ma 2 pola podobne (answer_7,answer_8), użytkownik 5 ma 5 pól podobnych (answer_1,answer_5,answer_6,answer_7,answer_8), to chciałbym w rezultacie otrzymać rekordy z danymi (dopasowanie, a_id_user) posortowane względem dopasowania malejąco, czyli w tym przypadku:

5 5
4 3
2 4
1 2

Pytanie - czy jest to wykonalne? Schemat bazy może zostać dowolnie zmieniony, ale powinien zakładać spore obciążenie - w tej przykładowej tabeli rekordów docelowo może być kilkadziesiąt tysięcy

Go to the top of the page
+Quote Post

Posty w temacie


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: 28.12.2025 - 20:45