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

System tagów php i mysql

Object Storage Arubacloud
0 głosów
335 wizyt
pytanie zadane 8 marca 2018 w PHP przez okti00 Obywatel (1,300 p.)

Witam wszystkich bardzo serdecznie!

Tak jak w temacie chciałbym wiedzieć jak zrobić system tagów na swojej stronie, mam swój pomysł ale nie wiem jak to zrobić więc przedstawię go wam.

Mam tabelę w bazie danych o np. nazwie POSTY i w tej tabeli POST_TAGS jako VARCHAR, w tej rubryce byłyby wypisane po przecinku (lub bez przecinka tylko po spacji) tagi czyli np. programowanie, nowy post... itd. Teraz chciałbym oddzielić i wypisać już bez przecinków, wyodrębnić na pojedyncze.

Z góry dziękuje za pomoc!

 

3 odpowiedzi

+2 głosów
odpowiedź 8 marca 2018 przez Tomek Sochacki Ekspert (227,510 p.)

w tej rubryce byłyby wypisane po przecinku

Zawsze gdy pomyślisz w ten sposób zrób krok wstecz i rozważ użycie dodatkowej tabeli pośredniej, łączącej np. post i tagi. Masz jedną tabelę posty np. z post_id, drugą tagi z tag_id i łączącą posty_tagi, gdzie będzie post_id i tag_id + klucz na oba id aby nie wystąpiła dwukrotnie ta sama para (czyli abyś nie mógł np. dwa razy do jednego posta dać tak "programowanie").

Jeśli potem z jakiś względów zechcesz sobie pobrać tagi jako "string" i rozdzielać przecinkiem to bardzo łatwo osiągniesz to np. funkcją GROUP_CONCAT w MySQL.

Zerknij sobie na: http://sqlfiddle.com/#!9/c8a67d7/1 jakiś czas temu na szybko robiłem sqlfiddla dla jednego z forumowiczów aby pokazać ideę złączeń i widoków, ale tutaj myślę, że też może się nadać.

komentarz 9 marca 2018 przez Tomek Sochacki Ekspert (227,510 p.)
Wszystko zależy od paru czynników, w tym m.in. od częstotliwości dokonywania zmian (a dokładniej insertów) w tabeli, częstotliwości ewentualnych przesunięć itp. Jest najłatwiejszy wzorzec adjacency list albo bardziej złożony nested set model lub ich wariacje itd. Może pomocny w jakimś stopniu będzie artykuł jaki wyszukałem w swoich archiwach: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ oraz http://we-rc.com/blog/2015/07/19/nested-set-model-practical-examples-part-i Ewentualnie napisz dokładniej coś o tych danych, albo machnij jakiegoś sqlfiddla abyśmy mogli potestować sobie na żywo. Pytanie jeszcze na jakiej bazie pracujesz? Czytałem, że nowa wersja MySQL ma wprowadzić wsparcie dla wyszukań rekurencyjnych ale to chyba jeszcze faza wstępna i nie opublikowana jako oficjalna.
komentarz 9 marca 2018 przez Ehlert Ekspert (212,670 p.)
No właśnie ze tak powiem narzucająca się metoda dla systemu kategorii wymaga niestety czegoś co obecnie jest w Oraclu. Zdaje się że to rekurencyjnu INNER JOIN.
komentarz 10 marca 2018 przez Tomek Sochacki Ekspert (227,510 p.)
a tak z ciekawości to jakie masz pomysły na rozwiązanie tego tematu. bo pisałeś, że coś już wykombinowałeś :) Nie chciałbym zrobić z tego offtopu na tym wątku ale temat jest ciekawy i warty dyskusji.
komentarz 10 marca 2018 przez Ehlert Ekspert (212,670 p.)

To co generalnie można zobaczyć w internecie... Kategoria to node z nazwą i wskazaniem na rodzica. Mamy nazwę i klucz obcy do tej samej tabeli. Niestety kolumna ze wskazaniem na rodzica musi być nullable biorąc pod uwagę że kategorie najwyższego rzędu nie mają nic nad sobą.

Teraz encje które chcemy kategoryzować mają wskazane id kategorii. No właśnie, której? Jeśli każda encja będzie wskazywać na "najgłębszą" kategorię, to nie wyciągniemy jej dysponując kategorią pośrednią, do której też się zalicza.

Rozwiązaniem alternatywnym jest relacja wiele do wielu kategoria-encja. Załatwia to sprawę dostępu z poziomu kategorii pośrednich. Problem stanowi zmiana kategoryzacji. Jest to bardzo kosztowna i skomplikowana operacja. Ponadto pojawia się duża redundancja danych. Co prawda jest niejawna, ale takie rozwiązanie generuje masę rekordów.

komentarz 10 marca 2018 przez Tomek Sochacki Ekspert (227,510 p.)
Czyli mówisz o adjacency list? A rozważałeś nested set model? Co prawda zmiana kategorii tutaj również jest dość problematyczna, a dokładniej mówiąc wymaga bardzo dokładnego algorytmu aby nie namieszać w bazie. A pytam tak po części z ciekawości a po części dlatego, że mam propozycję zrobienia pewnego portalu branżowego i ten temat mnie też za chwilę dotknie jeśli dojdzie do zlecenia.
0 głosów
odpowiedź 8 marca 2018 przez Ehlert Ekspert (212,670 p.)
Podaję hasło. Relacja wiele do wielu.
–1 głos
odpowiedź 9 marca 2018 przez Mariusz08 Maniak (62,300 p.)
W php funkcja explode()

Podobne pytania

0 głosów
1 odpowiedź 224 wizyt
pytanie zadane 20 stycznia 2017 w PHP przez DanielMK Nowicjusz (120 p.)
0 głosów
1 odpowiedź 143 wizyt
pytanie zadane 9 maja 2019 w JavaScript przez Whereismycode Obywatel (1,710 p.)
0 głosów
3 odpowiedzi 661 wizyt
pytanie zadane 28 lipca 2020 w PHP przez x_000 Obywatel (1,460 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...