chciał bym na stronie wyświetlać pokrewne działy według ilości wystąpień tych samych słów kluczowych. Szukałem na forum ale niestety nic nie znalazłem :/
Przypuśćmy że mamy tabelę: Nazwa
A w niej:
Kod
+----+----------+
| id | keywords |
+----+----------+
| 1 | a,b |
| 2 | a,c |
| 3 | b |
| 4 | b,c |
| 5 | a,b,c |
| 6 | c,a,b |
| 7 | a |
| 8 | b,a |
| 9 | c |
+----+----------+
| id | keywords |
+----+----------+
| 1 | a,b |
| 2 | a,c |
| 3 | b |
| 4 | b,c |
| 5 | a,b,c |
| 6 | c,a,b |
| 7 | a |
| 8 | b,a |
| 9 | c |
+----+----------+
I teraz chciał bym wybrać rekordy względem podobieństwa do rekordu z id 1. Rekord ten pobieram już wcześniej i mam jego wartość w zmiennej php.
Jako wynik chciał bym otrzymać coś w stylu:
Kod
5,6,8,2,3,4,7
5,6,8 - z największą zgodnością (2 słowa się powtarzają)
2,3,4,7 - z mniejszą zgodnością (1 słowo się powtarza)
9 - bez zgodności (0 słów się powtarza)
A w przypadku wybieranie względem rekordu z id=5:
Kod
6,1,2,4,8,3,7,9
6 - z największą zgodnością (3 słowa się powtarzają)
1,2,3,8 - z mniejszą zgodnością (2 słowa się powtarzają)
379 - z najmniejszą zgodnością (1 słowo się powtarza)
Zapytanie mogę tworzyć dynamicznie poprzez php więc nie ma potrzeby używania nigdzie poza wykreślaniem go z wyników, rekordu dla którego szukam podobnych.
Oczywiście można dla każdej wartości wykonać osobne zapytanie i w php policzyć ilość wystąpień ale zależało by mi na czymś bardziej optymalnym, tabela na której będą wykonywane operacje nie jest wcale mała więc zależy mi na ograniczeniu operacji na niej do minimum.
SELECT * FROM Nazwa WHERE id != 1 AND ( keywords LIKE '%a%' OR keywords LIKE '%b%' );
Pobiera dobre rekordy ale w złej kolejności.
Mam nadzieję że ktokolwiek zrozumiał moje wypociny i ma jakiś pomysł ;]
Pozdrawiam.