Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]System tagów
coomler
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 26.06.2010

Ostrzeżenie: (10%)
X----


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ć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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. (IMG:style_emoticons/default/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. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
coomler
post
Post #3





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 26.06.2010

Ostrzeżenie: (10%)
X----


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ą?
Go to the top of the page
+Quote Post
muk4
post
Post #4





Grupa: Zarejestrowani
Postów: 309
Pomógł: 56
Dołączył: 3.11.2006
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 20:09