[SQL] Join ali kaj druga?
4 naročniki
4 naročniki
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?
3 odgovori
Odvisno, v kakšni obliki bi imel te tage. Če so ti dovolj v text obliki, potem si poglej GROUP_CONCAT() funkcijo.
Drugače pa malo experimentiraš in pred SQL vtakneš še EXPLAIN, ki ti lepo razloži kako se bo SQL tudi izvedel.
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`