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

Wyszukiwarka oparta na tagach PHP

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
418 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 (214,530 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,490 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 (214,530 p.)

Tomasz słucham więc alternatyw cheeky

komentarz 19 grudnia 2018 przez Tomek Sochacki Ekspert (227,490 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,490 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 175 wizyt
+1 głos
3 odpowiedzi 848 wizyt
–1 głos
0 odpowiedzi 130 wizyt

93,191 zapytań

142,206 odpowiedzi

322,042 komentarzy

62,518 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 3053p. - dia-Chann
  2. 2998p. - Łukasz Piwowar
  3. 2993p. - Łukasz Eckert
  4. 2970p. - CC PL
  5. 2930p. - Tomasz Bielak
  6. 2907p. - Łukasz Siedlecki
  7. 2890p. - rucin93
  8. 2584p. - Adrian Wieprzkowicz
  9. 2536p. - Mikbac
  10. 2485p. - Marcin Putra
  11. 2461p. - Michał Telesz
  12. 2418p. - Michal Drewniak
  13. 2156p. - Anonim 3619784
  14. 1733p. - rafalszastok
  15. 1650p. - Mariusz Fornal
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...