SQL baze podataka - Sponzor: Baze-Podataka.net MySQL, MSSQL, Oracle, Access, ODBC. Ako imate problem brže i preciznije ćete dobiti odgovor ako priložite strukturu tabela ili skript koji kreira tabele i puni ih test podacima umesto što to problem opisujete samo rečima. Sponzor: Baze-Podataka.net - Blog o bazama podataka |
|
Alati teme | Način prikaza |
14. 04. 2007. | #1 |
expert
Grand Master
|
Tags - related entries problem
Imam entries i za njih vezane tagove
Related entries mi trenutno pokazuje 5 entrija koji imaju bar jedan zajednicki tag sa trenutnim, poredjani po id DESC E sad, ono sto bih ja hteo je da imam 5 naj-relevatnijih entrija. T.j. ako imam 5 tagova, i imam jos 2 entrija koji imaju zajednicki 1 tag sa trenutnim, a takodje imam i 1 entry koji ima 2 zajednicka taga - onda zelim da mi kao No1 pokaze upravo ovaj drugi Jel postoji neka slozenija SQL zavrzlama koja ce ovo malo brze da sredi od moje pesacke ideje: uraditi neki cron, koji ce za svaki unos pretrazivati ostale unose za zajednicke tagove, a zatim iste poredjati po broju zajednickih. Rezultat negde kesirati. Sutra idemo opet cron... |
14. 04. 2007. | #2 |
Dejan Katašić
Wrote a book
Datum učlanjenja: 10.06.2005
Lokacija: Novi Sad
Poruke: 1.017
Hvala: 129
86 "Hvala" u 43 poruka
|
Sigurno postoji to fino obrađeno teoretski i praktično na netu, no mene mrzi sada da tražim pa ću samo malo da pametujem :-)
Ako dobro razumem - to su ti (bar) dve tabele - jedna za entries i druga s tagovima i idovima entrija kojima odgovaraju tagovi. Ako tražiš skup relevantnih entrija, prvo posmatraš skup tagova trenutnog entrija. select identry, count(*) from tags where tag in (select tag from tags where identry = trenutni) and identry != trenutni group by identry order by count(*) desc limit 5 (ok, ovo je na nivou ideje, molio bih da me ispravi neko ako ima neka brljotina jer se već poduže nisam ozbiljnije igrao sql-a :-) |
14. 04. 2007. | #3 |
Python Ambassador
Master
|
Dobio sam ideju kako bi se moglo napisati nešto slično što je zamislio nK a bez upotrebe pod-upita:
Kôd:
# DDL CREATE TABLE `entry_tags` ( `entry_id` int(11) NOT NULL, `tag_id` int(11) NOT NULL, PRIMARY KEY (`entry_id`,`tag_id`) ); Kôd:
# Upit SELECT b.entry_id, COUNT(*) as score FROM entry_tags a JOIN entry_tags b ON a.tag_id = b.tag_id AND a.entry_id = 1 # entry_id za koji trazimo slicne unose GROUP BY b.entry_id HAVING b.entry_id != 1 # entry_id za koji trazimo slicne unose ORDER BY COUNT(*) DESC; Bolje rešenje bi bilo tipa +2 "glasa" za svaki tag koji se nalazi u oba unosa (referentni i onaj koji se trenutno poredi s njim) i -1 "glas" za svaki tag koji se ne nalazi u nekom od ta 2 unosa - i na kraju se rezultati sortiraju po sumi.
__________________
Python Ambassador of Serbia |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Šta voze srpski developeri (i ostali IT related) | bluesman | Opušteno | 291 | 01. 02. 2011. 01:58 |
Double float problem - resen, ali ima dodatni problem :0 | ljtruba | (X)HTML, JavaScript, DHTML, XML, CSS | 34 | 23. 08. 2008. 03:28 |
how many html tags can you name in 5 minutes | ivanhoe | Opušteno | 12 | 17. 02. 2008. 15:17 |
Related keywords | cvele | Web aplikacije, web servisi i software | 6 | 13. 01. 2007. 12:39 |
Omiljene "male" softverske i web-related kompanije | Dejan Bizinger | e-Business | 8 | 01. 03. 2006. 17:00 |