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

Wyszukiwarka oparta na tagach PHP

VPS Starter Arubacloud
0 głosów
300 wizyt
pytanie zadane 19 grudnia 2018 w PHP przez patrick167 Początkujący (260 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 Ekspert (212,630 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 Początkujący (260 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 Ekspert (227,510 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 Początkujący (260 p.)
baza byłaby stosunkowo mała więc myślę, że by się nadawało
komentarz 19 grudnia 2018 przez Ehlert Ekspert (212,630 p.)

Tomasz słucham więc alternatyw cheeky

komentarz 19 grudnia 2018 przez Tomek Sochacki Ekspert (227,510 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 Ekspert (227,510 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 Początkujący (260 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 137 wizyt
+1 głos
3 odpowiedzi 668 wizyt
–1 głos
0 odpowiedzi 117 wizyt

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...