Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] tagi
Forum PHP.pl > Forum > Bazy danych
shpyo
Witam
chciałem się Was dzisiaj zapytać o to, w jaki sposób można rozwiązać tagi.
Wpadłem na pomysł, aby tagi trzymać w oddzielnej komórce (odzielałbym je spacją).
Problem z szukaniem wg jednego tagu wtedy to pestka.
Schody się zaczynają gdy będę chciał pobrać wszystkie unikalne tagi.

Czy w mysql można pobrać w jakiś sposób jednym sprytnym zapytaniem tagi, które nie będą się powtarzać czy trzeba będzie w php wesprzeć?

Myślałem też jeszcze nad tym, aby zrobić maksymalną ilość tagów - wtedy będzie j/w i problem z pobieraniem unikalnycg tagów będzie łatwiejszy.

Jak Wy to rozwiązujecie?

pozdr,
Zbłąkany
Ja bym dał dwie tabele dodatkowe:
  1. tabela:
  2. tags
  3. +id
  4. +name
  5.  
  6. uses_tags
  7. +id
  8. +tid # tag id
  9. +aid # article id

W ten sposób możesz pobrać co sobie zażyczysz bez żadnych problemów smile.gif .
Levabul
A ja bym to zrobił na flagach bitowych smile.gif Używasz 1 tabeli dodatkowej:
tags
-tagId
-tagName

Jedynym utrudnieniem w tym sposobie jest to że tagId musi być wielokrotnością liczby 2.

Teraz musisz nauczyć się używać dwóch operatorów :
| - dodawanie bitowe
& - mnożenie bitowe

Jak to wykorzystać ?

Załóżmy że w tabeli tags mamy następujące rekordy:

Kod
+------+-------+
|tagId |tagName|
+------+-------+
|2     |tv     |
|4     |muzyka |
|8     |pc     |
+------+-------+


jeżeli np. artykuł należy do tagów pc i tv w dodatkowym polu w tabeli artykułyzapisujemy wynik dodawania bitowego:
Kod
2 | 8
W tym wypadku wynikiem będzie 10

Teraz jeżeli chcemy wyciągnąć np. wszystkie artykuły należące do tagu pc wykonujemy zapytanie:
  1. SELECT `title` AS 'article_title' FROM `articles` WHERE `tags` & 2


Jeżeli natomiast chcemy aby zapytanie zwróciło nam wszystkie artykuły należące do tagu music i do tagu pc:
  1. SELECT `title` AS 'article_title' FROM `articles` WHERE `tags` & 4 AND `tags` & 8


To chyba tyle smile.gif

więcej o flagach bitowych można poczytać na http://www.forum.kasart98.com/viewtopic.ph...highlight=flagi
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.