• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyszukiwarka oparta na tagach PHP

0 głosów
84 wizyt
pytanie zadane 19 grudnia 2018 w PHP, Symfony, Zend przez patrick167 Nowicjusz (140 p.)
Witam, w bazie danych znajdowała by się kolumna z tagami dla danego produktu w celu sprawdzenia przez wyszukiwarkę w PHP czy fraza wprowadzona = tagowi z bazy. Najlepiej jakby w jednym polu tag z bazy znajdowało się kilka fraz po przecinku. Jak sprawdzić czy fraza wprowadzona = jakiemuś tagowi z bazy. Pozdrawiam

1 odpowiedź

+1 głos
odpowiedź 19 grudnia 2018 przez Ehlert Mędrzec (164,560 p.)
Używasz LIKE, chociaż to bardzo kiepskie i ulomne rozwiązanie. Najlepiej stworzyć tabelę dla tagów i korzystać z relacji n:n.
komentarz 19 grudnia 2018 przez patrick167 Nowicjusz (140 p.)
ok dzięki spróbuję podziałać z tabelą, ewentualnie inne rozwiązania jakby ktoś miał pomysł
komentarz 19 grudnia 2018 przez Tomek Sochacki Mędrzec (177,970 p.)
te relacje n:n to rozwiazanie spoko ale jk masz mało danych... przy większych zbiorach zabijesz bazę :) ale to juz autor posta musi sobie sam odpowiedziec ile miałby takich porównań.
komentarz 19 grudnia 2018 przez patrick167 Nowicjusz (140 p.)
baza byłaby stosunkowo mała więc myślę, że by się nadawało
komentarz 19 grudnia 2018 przez Ehlert Mędrzec (164,560 p.)

Tomasz słucham więc alternatyw cheeky

komentarz 19 grudnia 2018 przez Tomek Sochacki Mędrzec (177,970 p.)
a to już zależy od konkretnego przypadku, od ilości danych itp. Jednym z rozwiązań są indeksy grupowane, możesz też dodawać w polu od razu np. tablicę z id-kami kategorii i przy strzale do bazy podmienić nazwę kategorii na jej id i sprawdzać, czy dany element zawiera tę kategorię. Tutaj łatwiejsze jest to na bazie noSQL gdzie możesz w polu zapisać tablicę, dlatego coraz częściej duże zbiory danych robi się z jak najmniejszą ilością relacji bo to dość kosztowne operacje.

Możesz też tworzyć osobne kolekcje grupujące rózne warianty, np. względem najczęściej wyszukiwanych czy względem jakiś schematów, np. masz 50 różnych kategorii, to możesz zrobić kolekcje tymczasowe (czasami nazywane indeksowymi) które zawierają idki artykułów, mających tę kategorię - wtedy zapytanie o kategorię X i Y weryfikuje tylko dwie kolekcje czyli np. tylko parę tysięcy rekordów a nie kilka czy kilkanaście milionów w całej bazie.

Generalnie takie typowe relacje są jak pisałem oki dla małych i mikro baz, gdzie tych rekordów masz parę tysięcy, to w takich bazach w ogóle jakiekolwiek optymalizacje są mikroskopijne. Ale gdy mówimy o średnich bazach gdzie rekordów jest wiele milionów czy o dużych big data gdzie masz paredziesiąt tysięcy strzałów na sekundę to każda optymalizacja search jest istotna... dochodzą też tematy odpowiedniego zarządzania klastrami itp. ale to jak pisałem temat mocno indywidualny, zależny też m.in. od tego jakim sprzętem dysponujesz, jak możesz to pokonfigurować itp.

Generalnie przy większych zbiorach z tego co widzę to bardzo dużą popularnością cieszy się elasticsearch. Tak naprawdę to w wielu aplikacjach największym obciążeniem wcale nie są dane "produkcyjne", czyli np. zakupy itp. tylko dane statystyczne, to jest największy wyzwanie, aby odpowiednio sprawnie zapisywać potężne zbiory danych i co bardzo ważne - szybko móc je przeszukiwać.
komentarz 19 grudnia 2018 przez Tomek Sochacki Mędrzec (177,970 p.)
ale przy małej bazie jak pisze autor posta to jak najbardziej nada się relacja n:n, tylko że warto i tak ograniczać strzały... to znaczy na przykład jeśli pobierasz załóżmy dane artykułu, w tym jego tagi których może być wiele, to nie musisz robić dwóch strzałów - o artykuł i potem o tagi, tylko np. w jednym strzale zrób sobie group_concat() (jeśli to mysql) i zapisz kategorie w jednym polu z jakimś separatorem, co potem w kodzie sobie szybko rozdzielisz na array bez dodatkowych strzałów... moim zdaniem to upraszcza nieco kodowanie, aczkolwiek są też różne szkoły... i czasami nie stosuje się żadych funkcji bazowanowych lecz wyciąga raw data i obrabia w back-endzie co daje 100% możliwości migracji na inne bazy... rozwiązań wiele, zależy od sytuacji.
komentarz 20 grudnia 2018 przez patrick167 Nowicjusz (140 p.)
dzięki za pomoc ,ale jeszcze jedno pytanko załóżmy, że w bazie z produktami bedzie klucz obcy powiedzmy tag_id. W jaki sposób w PHP będę mógł sprawdzić za pomocą query czy tag będzie taki jak to co wpisał user. Chodzi mi o to jak sprawdza/ odczytuje się dane z bazy w relacji

Podobne pytania

–3 głosów
0 odpowiedzi 76 wizyt
0 głosów
1 odpowiedź 91 wizyt
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

64,016 zapytań

110,391 odpowiedzi

231,155 komentarzy

47,799 pasjonatów

Przeglądających: 295
Pasjonatów: 15 Gości: 280

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...