SQL выберите тег для записи в блоге

1

Я создаю блог и хочу показывать теги для всего моего сообщения. У каждого сообщения может быть много тегов. Поэтому я сохранил информацию о тегах в таблице tblTag и мой пост в блоге, хранящийся в tblPost.

В настоящее время, чтобы показать все сообщения и все теги за сообщение. Я использую метод ниже:

Select * from tblPost // this to select all post

И сделайте цикл while в блоге:

Select * from tblTag where BlogPostID= ... // this to select tag per post

Эта работа. Но производительность очень плохая. Я не хочу, чтобы сервер выполнял много запросов. В любом случае, лучше?

  • 0
    Можете ли вы описать структуру (имя столбца) dbo.tblTag ?
  • 0
    «В любом случае, чтобы сделать это лучше». Что делать? Получить все сообщения вместе с их тегами? Вы можете использовать JOIN, чтобы получить всю эту информацию в одном запросе ...
Теги:
sql-server

2 ответа

1
Лучший ответ

Да, вы можете использовать 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 = ...

Это даст вам все теги, разделенные запятыми, в отдельной колонке.

  • 0
    Это возможно для SQL-сервера-2005 или SQL-сервера-2008?
  • 0
    @monocular Да, он должен работать как на 2005, так и на 2008 год. Но попробуйте запустить его в SSMS, чтобы убедиться ...
Показать ещё 2 комментария
0

Вы можете использовать SQL-запрос для получения информации о сообщении (название, дата и т.д.), А также все строки тегов, связанные с этим сообщением.

SELECT p.*, t.* FROM tblPost p
left join tblTag t on t.BlogPostID = p.id

После того, как вы получили выше, вы можете циклически перемещаться по строкам в вашем наборе данных.

  • 0
    Но в одном посте может быть много тегов. Как соединить строку тега meny в одну строку сообщения и отделить ее символом ","? Например: сообщение № 1, тег: a, b, c

Ещё вопросы

Сообщество Overcoder
Наверх
Меню