Henter poster med slug i stedet for ID

stemmer
5

Jeg er for tiden prøver å finne den beste måten (på sikt av brukervennlighet og ytelse) når du arbeider med en situasjon som henter poster merket med en bestemt kode, eller kategori, eller noe sånt.

En god måte (slik jeg ønsket å gjøre), ville være å hente poster med tag / kategori slug, slik at nettadressen vil se ut:

http://stackoverflow.com/questions/tagged/language-agnostic

henting av poster ved slug, som ser bedre enn:

http://stackoverflow.com/questions/tag/789/language-agnostic

henting av ID og legge slug bak så det er mer søkemotor vennlig. Dette er bedre ytelsesmessig, fordi innhenting av data ved et heltall ID ville være raskere enn en streng. (Cmiiw)

Nå, med en db skjema som:

posts    post_to_tags    tags
-----    ------------    ----
id       id              id
title    post_id         name
content  tag_id          slug
...                      ...

gjør jeg det riktig? Er det fallgruve eller beste praksis som jeg trenger å vite for å unngå problemer med ytelsen? (F.eks. Kodene skal ikke overstige 10.000 poster, eller tag slug bør ikke overstige n tegn, eller noe annet)

Takk på forhånd.

Publisert på 27/01/2009 klokken 06:29
kilden bruker
På andre språk...                            


2 svar

stemmer
4

Med den første URL stil og din nåværende db design, kan du gjøre dette:

select ...
from   posts p
join   posts_to_tags pt on pt.post_id = p.post_id
join   tags t on t.id = pt.tag_id
where  t.slug = [url slug value];

Så lenge tags.slug er indeksert, bør dette være svært effektiv, knapt noe forskjellig fra

select ...
from   posts p
join   posts_to_tags pt on pt.post_id = p.post_id
where  pt.tag_id = [url tag ID];
Svarte 27/01/2009 kl. 10:24
kilden bruker

stemmer
0

Den første er bedre, men kan snegler muligens endres? I så fall ville du trenger å ha en omdirigering tabellen (for eksempel "noen-artikkel-om-dogs" er nå "artikkel-om-hunder-og-katter").

Svarte 27/11/2009 kl. 14:08
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more