Как получить данные, разделенные запятыми, из 1 таблицы и получить связанные данные из другой таблицы? - PullRequest
0 голосов
/ 23 декабря 2010

У меня есть 1 таблица, в которой хранятся категории.Например:

CategoryId      CategoryName
-------------------------------
1              General

2              dummy

3              test

теперь у меня есть 1 другая таблица, в которой я храню статьи, и в этой таблице я храню идентификатор статьи со значениями, разделенными запятыми, поскольку 1 статья может быть в более чем 1 категории

ArticleID       Content       CategoryId
-------------------------------------------
1              Test            1,2
2              Test2           1,3
3              Test3           1,2,3
4              Test4           2

Теперь на лицевой стороне, когда я отображаю статью, я хочу также отобразить название категории статьи.

Так что вы можете сказать мне, как мне этого добиться ???

Вывод должен бытькак ::

ArticleId      Content        Category
------------------------------------------
1             Test             General,dummy
2             Test2            General,test
3             Test3            General,dummy,test
4             Test4            dummy

Ответы [ 3 ]

3 голосов
/ 23 декабря 2010

Может быть, вам стоит подумать об изменении своей модели данных.

Создайте дополнительную таблицу Article_Category (ArticleID, CategoryID), и для каждой статьи поместите подряд для каждой категории, к которой относится статья.

Запрос становится простым соединением трех таблиц.Сортируйте выходные данные по статье и категории, и вы можете легко "сгладить" выходные данные в графическом интерфейсе.

0 голосов
/ 23 декабря 2010

Если вы знаете какой-то .NET, вы можете создать что-то вроде StringAggregator. Ваши предыдущие вопросы указывают на то, что вы знакомы с программированием.

Создайте проект SQL Server 2005/2008 и используйте этот код

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.Collections.Generic
Imports System.IO

<Serializable()> _
<Microsoft.SqlServer.Server.SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize:=8000)> _
Public Structure StringAggrComma
    Implements IBinarySerialize

    Private values As List(Of String)

    Public Sub Init()
        ' Put your code here
        values = New List(Of String)
    End Sub

    Public Sub Accumulate(ByVal value As SqlString)
        ' Put your code here
        values.Add(value.Value.Trim)
    End Sub

    Public Sub Merge(ByVal value As StringAggrComma)
        ' Put your code here
        For Each val As String In value.values
            Accumulate(val)
        Next
    End Sub

    Public Function Terminate() As SqlString
        ' Put your code here
        Return New SqlString(String.Join(", ", values.ToArray))
    End Function

    Public Sub Write(ByVal w As System.IO.BinaryWriter) Implements Microsoft.SqlServer.Server.IBinarySerialize.Write
        w.Write(values.Count)
        For Each item As String In values
            w.Write(item)
        Next
    End Sub

    Public Sub Read(ByVal r As System.IO.BinaryReader) Implements Microsoft.SqlServer.Server.IBinarySerialize.Read
        values = New List(Of String)
        For i As Int32 = 0 To r.ReadInt32
            values.Add(r.ReadString)
        Next
    End Sub
End Structure
0 голосов
/ 23 декабря 2010

В MySQL вы можете сделать это с помощью агрегатной функции GROUP_CONCAT. Я не думаю, что есть что-то подобное в T-SQL, но вы можете использовать это в своем поиске. Вот пример кого-то, спрашивающего об этом: http://social.msdn.microsoft.com/Forums/en/transactsql/thread/f09d4166-2030-41fe-b86e-392fbc94db53.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...