Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

System tagów i sprawdzanie, czy fraza występuje w kolumnie

Zdecydowałeś się na tworzenie interaktywnych stron przy pomocy PHP? Chcesz w łatwy i szybki sposób zarządzać danymi na swojej stronie? Tutaj znajdziesz pomoc w napotkanych przy tym trudnościach.

System tagów i sprawdzanie, czy fraza występuje w kolumnie

Post 14.04.2017, 14:28:24

Witam,

z góry przepraszam, jeśli post wrzuciłem w złym dziale.

Szukam od jakiegoś czasu odpowiedzi na pytanie, jak skonstruować zapytanie do bazy MySQL tak, by zwracło tylko te rekordym w których występuje X liczba spełnionych warunków z klauzuli LIKE.

Dla lepszego zobrazowania problemu załączę przykład:

załóżmy, że to jest przykładowa tabela:

|user_id|...|user_tags
| 1 |...|dramat, komedia, teatr, taniec, gotowanie, akcja

I teraz potrzebuję zapytania, które znajdzie wiersz pierwszy po spełnieniu następujących warunków:
• po wprowadzeniu zapytania w klauzuli LIKE będą pasować: dramat, komedia, teatr, taniec

Dodatkowo, chcę, by można było ustawić, po jakiej ilości zgodnych kluczy będzie znajdowany ten wynik.

PS co zrobić, by tagi nie musiały być w takiej samej kolejności, jak w tabeli użytkowników?

Z góry dziękuję i pozdrawiam
FalcoPL
Szymon

Posty: 17
Dołączył(a): 14.04.2017

Re: System tagów i sprawdzanie, czy fraza występuje w kolumn

Post 15.04.2017, 14:35:00

Źle skonstruowałeś tabelę w bazie danych. Wpakowanie kilku tagów do jednej kolumny narzuca mnóstwo ograniczeń i powoduje sporo problemów - na przykład takich, jak ten. ;) Najprościej będzie zmienić strukturę tabeli w taki sposób, aby zamiast pola 'user_tags' mieć pole 'user_tag' (jeden tag) i dla każdego tagu tworzyć nowy rekord.

Idealnie byłoby rozbić konstrukcję na dwie tabele - tagi (słownik) i przyporządkowanie użytkownika do tagów (po identyfikatorze), np. tak:
Kod: Zaznacz cały
tabela 'tags':
| tag_id | tag |
| 1 | dramat |
| 2 | komedia |
| 3 | taniec |

tabela user_tag:
| id | user_id | tag_id |
| 1 | 1 | 2 |
| 2 | 1 | 3 |
Avatar użytkownikatoszcze
Bartosz Romanowski

SuperGod
SuperGod

Posty: 8886
Dołączył(a): 14.10.2003
Lokalizacja: Mysłowice

Re: System tagów i sprawdzanie, czy fraza występuje w kolumn

Post 16.04.2017, 18:32:32

toszcze, myślałem o tym, ale chcę, by ludzie sami mogli tworzyć tagi i zastanawiam się, jak to zrobić, by nie powstał wielki bałagan. Sądzisz, że dalej to rozwiązanie jest poprawne? I jakie do tego dać zapytanie?
FalcoPL
Szymon

Posty: 17
Dołączył(a): 14.04.2017

Re: System tagów i sprawdzanie, czy fraza występuje w kolumn

Post 16.04.2017, 21:12:50

Nic nie stoi na przeszkodzie, aby w mojej wersji użytkownicy mogli tworzyć własne tagi. Jeśli natomiast chodzi o bałagan, to moja wersja na pewno takowego nie spowoduje.

Jak rozumiem, chodzi Ci o zapytanie, które zwróci Ci użytkowników, którzy mają X tagów z podanej listy. Możesz to zrobić na przykład tak:
Kod: Zaznacz cały
SELECT user_id, COUNT(*) AS tags FROM user_tag ut, tags t WHERE t.tag_id = ut.tag_id AND
(t.tag LIKE '%słowo%' OR t.tag LIKE '%inne słowo%' OR t.tag LIKE '%jakiśtag%')
HAVING tags > jakaś_liczba_tagów
Avatar użytkownikatoszcze
Bartosz Romanowski

SuperGod
SuperGod

Posty: 8886
Dołączył(a): 14.10.2003
Lokalizacja: Mysłowice

Re: System tagów i sprawdzanie, czy fraza występuje w kolumn

Post 20.04.2017, 17:39:55

Sprawdziłem, to jest to, dziękuję bardzo za pomoc ;). Jeszcze jedno pytanie: zapis
Kod: Zaznacz cały
WHERE t.tag_id = ut.tag_id

to to samo, co połączenie tabel przez INNER JOIN?

Pozdrawiam
FalcoPL
Szymon

Posty: 17
Dołączył(a): 14.04.2017

Re: System tagów i sprawdzanie, czy fraza występuje w kolumn

Post 21.04.2017, 16:15:52

Efekt końcowy będzie taki sam.
Avatar użytkownikatoszcze
Bartosz Romanowski

SuperGod
SuperGod

Posty: 8886
Dołączył(a): 14.10.2003
Lokalizacja: Mysłowice


Powrót do PHP i bazy danych


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 7 gości

Hosting, Domeny, SSL
iCash

Subskrypcja

Mamy 50186 zarejestrowanych użytkowników.
Najnowszy użytkownik: sskijop


Nasi użytkownicy napisali:

  • 935178 wiadomości
  • w 246378 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)