[C#] Data met koppeltabel ophalen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Cryothic
  • Registratie: September 2001
  • Laatst online: 04-09-2024
Het volgende probleem:
Ik heb 3 tabellen.
-films
-genres
-films_genres

de eerste twee spreken denk ik wel voor zich, de derde is een koppeltabel om een film aan 1 of meer genres te koppelen.

Nou is mijn vraag, hoe haal ik dat het makkelijkste op, om te zorgen dat het op een webform netjes in een tabel komt?

Ik gebruik nu inner joins, en krijg alle data, maar natuurlijk komt elke film net zo vaak voor als dat ie genres heeft.

Als ik hem als XML output (for xml auto) krijg ik in princiepe wel goede data (film tag, met daarin n* genre tag), maar dat lijkt me niet echt lekker werken om die zooi in een datatable of repeater te gooien.

Ik wil als tabel dus zoiets:
code:
1
2
3
4
titel  | genre(s)
---------------------------
film1  | romantiek, comedy
film2  | horror


Is dit een beetje te automatiseren?
Of moet ik gewoon de hele tabel binnenhalen, en per record gaan kijken of het dezelfde film is als de vorige, en zo ja bij de vorige film een genre toevoegen?

[Visual WebDeveloper 2008, SQL Server 2008 Express]

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:56
Haal de data op zoals dat je nu doet, en ga in je 'view' (mbhv c# bv) ervoor zorgen dat de boel geoutput wordt zoals jij wilt.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Asator
  • Registratie: December 2009
  • Laatst online: 12-02-2024
Ik werk zelf met MySQL waar je dit kan doen met GROUP_CONCAT(), helaas zit deze functie niet SQL Server.
Als je het toch wilt oplossen in SQL Server kan je zelf een functie maken.

Nou weet ik zelf niet zo heel veel van SQL Server maar misschien dat je hier want aan hebt:
http://blog.shlomoid.com/...groupconcat-function.html
http://3poundmass.wordpre...csv-string-in-sql-server/

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Asator schreef op woensdag 09 december 2009 @ 23:59:
Ik werk zelf met MySQL waar je dit kan doen met GROUP_CONCAT()
Weergave is geen probleem van je RDBMS maar van je View. Of laat je je query's ook meteen HTML uitspugen?

SQL:
1
select '<h1>' + title + '</h1><p>' + body + '</p>' from content where id = 123123;

?
Asator schreef op woensdag 09 december 2009 @ 23:59:
helaas zit deze functie niet SQL Server.
En met reden ;)

whoami's response is, IMHO, de enige juiste.

[ Voor 10% gewijzigd door RobIII op 10-12-2009 00:02 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Misschien werkt het verhelderend als je even hier kijkt:
http://stackoverflow.com/...o-single-row-csv-property

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • neothor
  • Registratie: Oktober 2004
  • Laatst online: 02-10-2023
Welke technieken gebruik je verder? C# maar welke versie. Heb je de mogenlijkheid tot Linq to SQL?

Last.fm | LinkedIn | Twitter


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
neothor schreef op donderdag 10 december 2009 @ 12:00:
Welke technieken gebruik je verder? C# maar welke versie. Heb je de mogenlijkheid tot Linq to SQL?
Sorry hoor, maar dit zou ik niet echt een reden vinden om naar Linq to SQL te grijpen. Met de Linq extension methods kan je het misschien iets netter schrijven, maar in feite is het groeperen de volgende operatie
C#:
1
2
3
4
5
6
7
8
Dictionary<string, List<string>> myGrouping = new Dictionary<string, List<string>>();
foreach( DataRow row in rows )
{
    if(!myGrouping.ContainsKey(row["Name"]))
        myGrouping[row["Name"]] = new List<string>();

    myGrouping[row["Name"]].Add(row["Genre"]);
}

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • neothor
  • Registratie: Oktober 2004
  • Laatst online: 02-10-2023
Woy schreef op donderdag 10 december 2009 @ 12:11:
[...]

Sorry hoor, maar dit zou ik niet echt een reden vinden om naar Linq to SQL te grijpen. Met de Linq extension methods kan je het misschien iets netter schrijven, maar in feite is het groeperen de volgende operatie
C#:
1
2
3
4
5
6
7
8
Dictionary<string, List<string>> myGrouping = new Dictionary<string, List<string>>();
foreach( DataRow row in rows )
{
    if(!myGrouping.ContainsKey(row["Name"]))
        myGrouping[row["Name"]] = new List<string>();

    myGrouping[row["Name"]].Add(row["Genre"]);
}
Dat was niet echt het idee van mijn post. Ik wou graag weten wat hij op het moment al gebruikte en daar een passende oplossing bij zoeken.

Last.fm | LinkedIn | Twitter


  • Cryothic
  • Registratie: September 2001
  • Laatst online: 04-09-2024
Ik gebruik momenteel C# op 3.5 framework.
Linq kan ik wel gebruiken.

En ja, in C# de zooi aan elkaar knopen is een optie, maar ik heb dan het idee dat ik weer terug ga richting classic ASP methodes. Met domweg een recordset binnenhalen, en zelf een array gaan vullen ofzo :)

Ik hoopte eigenlijk dat er een makkelijkere manier was. Maar ik zal die link van Pedorus eens doorlezen.

Al zit ik me af te vragen of het niet handiger is om de genres gewoon plat als kolommen op te nemen in de film tabel. Het zal niet veranderen, en het leest volgens mij een stuk makkelijker uit. Om nog maar te zwijgen van het opslaan.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Cryothic schreef op donderdag 10 december 2009 @ 13:24:
En ja, in C# de zooi aan elkaar knopen is een optie, maar ik heb dan het idee dat ik weer terug ga richting classic ASP methodes. Met domweg een recordset binnenhalen, en zelf een array gaan vullen ofzo :)
Maar het is natuurlijk gek om je presentatie ( Het weergeven van verschillende elementen, gescheiden door een komma ) in je database te gaan doen.

Presentatie wil je in je view doen, en in dit geval dus in C#
Ik hoopte eigenlijk dat er een makkelijkere manier was. Maar ik zal die link van Pedorus eens doorlezen.
Wat is er moeilijk aan dan? De link die Pedorus geeft doet in feite bijna hetzelfde, alleen gebruikt daar een LINQ extension method voor.
Al zit ik me af te vragen of het niet handiger is om de genres gewoon plat als kolommen op te nemen in de film tabel. Het zal niet veranderen, en het leest volgens mij een stuk makkelijker uit. Om nog maar te zwijgen van het opslaan.
Maar dat is weer niet echt handig. Als je het in een kolom zet, dan zit je vast aan je presentatie ( Immers zit dat dan al in je data verwerkt ). Als je het over meerdere kolommen zet dan zit je weer vast aan een vast aantal mogelijke genres.

Om dan nog maar niet te spreken over het selectere van alle films die in een genre vallen. In het geval van 1 kolom moet je dan met string functions gaan werken, en anders moet je iets van ( Where genre1 = '...' or genre2 = '...' or ...... )

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • neothor
  • Registratie: Oktober 2004
  • Laatst online: 02-10-2023
Ik zou de database laten zoals die is. Dit moet je daar niet op willen lossen. Het ophalen gaat goed zeg je dan kan je doormiddel van Linq een GroupBy doen op film of de oplossing Woy aandraagt mocht je geen Linq willen gebruiken.

Het aan elkaar knopen van de genres kan je bijvoorbeeld doen met String.Join

Last.fm | LinkedIn | Twitter

Pagina: 1