Я создаю блог и хочу показывать теги для всего моего сообщения. У каждого сообщения может быть много тегов. Поэтому я сохранил информацию о тегах в таблице tblTag и мой пост в блоге, хранящийся в tblPost.
В настоящее время, чтобы показать все сообщения и все теги за сообщение. Я использую метод ниже:
Select * from tblPost // this to select all post
И сделайте цикл while в блоге:
Select * from tblTag where BlogPostID= ... // this to select tag per post
Эта работа. Но производительность очень плохая. Я не хочу, чтобы сервер выполнял много запросов. В любом случае, лучше?
Да, вы можете использовать CROSS APPLY
.
SELECT p.*, LEFT(ISNULL(t.n,''), LEN(t.n) - 1)
FROM tblPost p
CROSS APPLY (SELECT it.TagName + ',' FROM tblTag it WHERE it.BlogPostId = p.BlogPostId FOR XML PATH('')) t(n)
WHERE p.BlogPostID = ...
Это даст вам все теги, разделенные запятыми, в отдельной колонке.
Вы можете использовать SQL-запрос для получения информации о сообщении (название, дата и т.д.), А также все строки тегов, связанные с этим сообщением.
SELECT p.*, t.* FROM tblPost p
left join tblTag t on t.BlogPostID = p.id
После того, как вы получили выше, вы можете циклически перемещаться по строкам в вашем наборе данных.
dbo.tblTag
?