Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]System tagów
Forum PHP.pl > Forum > Przedszkole
coomler
Witam, chciałem zrobić system tagów. Miałby on wyglądać podobnie do tego z WP, tzn. klikamy na tag i pokazuje nam wpisy, które są oznaczone właśnie tym tagiem.

Tagi zapisywane by były w innej tabeli niż newsy, każdy tag w innej komórce(rozwalanie ciągu tagów - explode) i skorzystać z klucza zewnętrznego, żeby było jakieś powiązanie między tagami i wpisami. Później to już chyba oczywiste, tag wyświetlany jako link i po kliknięciu pokazuje tylko te wpisy, które mają taki tag.

Co o tym sądzicie? Dobry, czy zły pomysł? Jak macie jakieś inne propozycje to proszę pisać, jeżeli nie macie to może jakieś rady, bo szczerze mówiąc mam problem z rozpoczęciem.

1. Jak ciąg z jednego pola input rozwalić, np. na trzy części(to akurat nie problem) a później wstawić je do zapytania, aby zostały utworzone trzy wiersze każdy z innym tagiem? Skorzystać z pętli?
2. Jak zrobić, aby dodając wtórny raz tag, np js nie tworzyć nowego wiersza, a skorzystać z tego utworzonego wcześniej i oczywiście przypisać go do danych wpisów.

Będę wdzięczny za wszelkie rady, wskazówki, funkcje które mogą mi się przydać.
erix
Cytat
Tagi zapisywane by były w innej tabeli niż newsy, każdy tag w innej komórce(rozwalanie ciągu tagów - explode) i skorzystać z klucza zewnętrznego, żeby było jakieś powiązanie między tagami i wpisami.

Relacja wiele-do-wielu.
Cytat
1. Jak ciąg z jednego pola input rozwalić, np. na trzy części(to akurat nie problem) a później wstawić je do zapytania, aby zostały utworzone trzy wiersze każdy z innym tagiem? Skorzystać z pętli?

Możesz dać jednego inserta, w stylu
  1. INSERT INTO (a,b) VALUES('aaa','bbb'), ('ccc','ddd');

o ile mnie pamięć nie myli. winksmiley.jpg

Cytat
2. Jak zrobić, aby dodając wtórny raz tag, np js nie tworzyć nowego wiersza, a skorzystać z tego utworzonego wcześniej i oczywiście przypisać go do danych wpisów.

Generalnie nie potrzebujesz sprawdzać, czy istnieje już dany tag. Daj insert ignore + odpowiedni indeks i tyle.

Przy usuwaniu jest trochę więcej zabawy. winksmiley.jpg
coomler
Z tego co wyczytałem insert ignore działa tak jak normalne insert z tym, że nie wstawia do bazy danych tych danych które już istnieją?
muk4
A nie lepiej zrobić tak, że dodać dodatkowe pole w tabeli newsów i każdy tag oddzielany jest spacją?
Potem przy wyszukiwaniu newsów z tagiem pobierać to pole z tagami, explode i sprawdzać czy jest taki tag?

Ewentualnie całkiem odwrotnie: tablica z tagami i 2 pola: tag i id newsów które korzystają z tego taga. Wtedy łatwiej z wyszukiwaniem bo wynik masz gotowy.

Dosyć ciekawy temat. Czekam na pomysły innych.
erix
Cytat
A nie lepiej zrobić tak, że dodać dodatkowe pole w tabeli newsów i każdy tag oddzielany jest spacją?

No tak, tylko że zamiast wyszukiwać posty pasujące do danego taga z wykorzystaniem indeksu, musisz przeszukiwać wszystkie rekordy po kolei.

Cytat
że nie wstawia do bazy danych tych danych które już istnieją?

Owszem.

Cytat
Ewentualnie całkiem odwrotnie: tablica z tagami i 2 pola: tag i id newsów które korzystają z tego taga. Wtedy łatwiej z wyszukiwaniem bo wynik masz gotowy.

Nadal to samo, o czym pierwsze napisałem: utrudnia skorzystanie z technik optymalizacyjnych. Nie bez powodu istnieje coś takiego, jak N-N. winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.