[SQL] Join ali kaj druga?
 
Chelios 13. maj 2010 11:38:45 Pridružen od:
9. apr 2010
27 objav
5 0 0
#1

Imam tabele...



texts (id, title, text)

tags (id, title)

tagslinks (id, tagid, text_id)



pa me zanima kakšen bi bil najbolj optimiziran query, ki bi mi zraven tega...



SELECT * FROM texts ORDER BY title ASC LIMIT 28;



selectal še tage, znam selectati samo en tag, problem je, da je pri nekaterih textih več tagov, pri drugih pa jih sploh ni. Če sploh gre to tako kot sem si zamislil?


všeč(0) ni všeč(0) spam(0)
Just juice me!
 
Vini 13. maj 2010 11:54:11 Pridružen od:
1. sep 2006
6612 objav
5234 611 56
#2

Odvisno, v kakšni obliki bi imel te tage. Če so ti dovolj v text obliki, potem si poglej GROUP_CONCAT() funkcijo.


všeč(1) ni všeč(0) spam(0)
 
Pete 19. maj 2010 08:12:15 Pridružen od:
19. maj 2010
2 objav
0 0 0
#3

Drugače pa malo experimentiraš in pred SQL vtakneš še EXPLAIN, ki ti lepo razloži kako se bo SQL tudi izvedel.


všeč(0) ni všeč(0) spam(0)
 
wickedsheep 19. maj 2010 22:00:38 Pridružen od:
22. jan 2010
20 objav
26 0 0
#4

Cisto na hitro, ce prav vidim imas tu 2 tabeli, "texts" in "tags" ter se eno povezovalno (link) tabelo "tags_links".



Za optimalno delovanje se najprej znebi atributa "id" iz tabele "tags_links". Ce imas m:n povezavo je ta "id" cisto odvec. Z drugimi besedami - imas en tekst, ki ima lahko vec tagov in en tag, ki ima lahko vec tekstov.



Potem pa lahko zadevo joinas, gres iz "texts" preko "tags_links" v "tags".



Pisem na pamet:


SELECT
`t`.`id`,
`t`.`title`,
`t`.`text`,
`tg`.`title`,
FROM `texts` AS `t`
LEFT JOIN `tags_links` AS `tl` ON `tl`.`text_id` = `t`.`id`
LEFT JOIN `tags` AS `tg` ON `tg`.`id` = `tl`.`tag_id`
všeč(0) ni všeč(0) spam(0)
ExtJS, Sencha Touch consulting | MySQL, MSSQL, Oracle performance tuning - wickedsheep.si
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se