Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] tagi, web20 ;]
shpyo
post
Post #1





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

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


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,


--------------------
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #2


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


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 .


--------------------
Środowisko: Gentoo 2008.0 | Apache | PHP5 | PostgreSQL | MySQL | Postfix
Workstation: Gentoo 2008.0 | Firefox
Thomas Alva Edison: "Aby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu ..."
Odpowiedź na każde pytanie typu "Jak ...": "Nie da się, to nie PostgreSQL"
Go to the top of the page
+Quote Post
mtod
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.07.2006

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


http://www.pui.ch/phred/archives/2005/04/t...se-schemas.html


--------------------
Go to the top of the page
+Quote Post
Levabul
post
Post #4





Grupa: Zarejestrowani
Postów: 197
Pomógł: 0
Dołączył: 11.07.2005

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


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

Ten post edytował Levabul 4.09.2006, 10:57:34


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 08:42