mboost-dp1

data fra mssql paa en lidt speciel maade!


Gå til bund
Gravatar #1 - slemmebirk
23. jul. 2009 12:33
Hej, jeg har faaet en opgave jeg simpelthen ikke kan finde en logisk maade at loese paa, har proevet mig lidt frem uden held. Jeg har ikk proevet at soege paa google da jeg simpelthen ikke ved hvad jeg skal soege efter.

jeg har en tabel der hedder Testimonials i mssql som indeholder felterne ID, Member_ID, Branch_ID og Content

Kunden vil have mig til at goere saa at der bliver vist en liste over alle de her udtalelser fra studerende paa hans skole fra Testimonials. Branch_ID har en relation til tabellen Branches og i den er der records med ID fra 1-8. Han vil saa have at foerste visning er med branch_id 1 og det naeste 2, 3, 4, 5, 6, 7, 8 og saa forfra igen.

Haaber i kan hjaelpe! :)

webloesningen er skrevet i vb .net 3.5
Gravatar #2 - Windcape
23. jul. 2009 13:03
Er det ikke bare et JOIN af Branches på Branch_ID


FROM [Testimonials]
JOIN [Branches]
ON [Testimonials].[Branch_ID] = [Brances].[ID]


Som så er arrangeret efter Branch_ID.


FROM [Testimonials]
JOIN [Branches]
ON [Testimonials].[Branch_ID] = [Brances].[ID]
ORDER BY [Branch_ID]


Derudover synes jeg det er dårlig navngivning af felter, Det er så meget mere overskueligt at benytte CamelCase, istedet for underscores, samt at 'Content' er et reserveret nøgleord!

Og du bør navngive Id som TabelnavnId , da det er meget nemmere at lave joins, uden at skulle tilføje den fulle sti, samt evt. at blive tvunget til at lave et alias for at hente begge felter ud.
Gravatar #3 - slemmebirk
23. jul. 2009 13:09
Til mit forsvar saa er det ikke mig der har skruet tabellerne sammen - men ja jeg foretraekker at bruge CamelCase.

on topic:

Jeg er klar over at jeg skal lave en join paa de to tabeller men hvordan fanden faar jeg dem til foerst at vise _ET_ resultat med branch id 1 derefter et med id 2 saa 3, saa 4, saa 5, saa 6, saa 7, saa 8, saa 1 igen osv osv osv
Gravatar #4 - slemmebirk
23. jul. 2009 14:19
arne_v c'mon du har altid en loesning!!!!
Gravatar #5 - JensOle
23. jul. 2009 14:33
Maaske skal du joine noget mere og saa ORDER BY noget andet fra Brances.

Hvordan ser din Brances table ud ?
Gravatar #6 - Windcape
23. jul. 2009 15:01
slemmebirk (3) skrev:
Jeg er klar over at jeg skal lave en join paa de to tabeller men hvordan fanden faar jeg dem til foerst at vise _ET_ resultat med branch id 1 derefter et med id 2 saa 3, saa 4, saa 5, saa 6, saa 7, saa 8, saa 1 igen osv osv osv
Altså:

1 A 999
1 A 666
1 A 333
2 B 888
2 B 555
2 B 222
3 C 777
3 C 444
3 C 111

Istedet for

1 A 999
2 B 888
3 C 777
1 A 666
2 B 555
3 C 444
1 A 333
2 B 222
3 C 111

Det er jo bare at gruppere på in Branch_ID. Og da SQL er et funktionelt sprog er det ligeså let som det lyder:

GROUP BY Branch_ID

og done :)
Gravatar #7 - slemmebirk
23. jul. 2009 15:03
#6 Super, tror det var det jeg ledte efter!

tusind tak for hjaelpen!
Gravatar #8 - arne_v
23. jul. 2009 17:27
Jeg kan ikke lige gennemskue hvordan GROUP BY skulle løse det sorterings problem.

Alternativt approach:


1>
2> SELECT id,branchid,otherstuff FROM testimonials
3> GO
id branchid otherstuff
----------- ----------- ----------
1 2 bla bla 1
2 3 bla bla 2
3 1 bla bla 3
4 3 bla bla 4
5 1 bla bla 5
6 1 bla bla 6
7 3 bla bla 7
8 2 bla bla 8

(8 rows affected)
1> SELECT id,branchid,otherstuff,(SELECT COUNT(*) FROM testimonials t2 WHERE t2.
branchid = t1.branchid AND t2.id < t1.id) AS n FROM testimonials t1 ORDER BY n,
branchid
2> GO
id branchid otherstuff n
----------- ----------- ---------- -----------
3 1 bla bla 3 0
1 2 bla bla 1 0
2 3 bla bla 2 0
5 1 bla bla 5 1
8 2 bla bla 8 1
4 3 bla bla 4 1
6 1 bla bla 6 2
7 3 bla bla 7 2

(8 rows affected)
Gravatar #9 - vandfarve
23. jul. 2009 19:37
1> Import AI
2> Solve problem


[spoiler]http://xkcd.com/353/[/spoiler]
Gravatar #10 - Windcape
23. jul. 2009 19:56
#9

Pfft, han kunne også bare bruge C# og LINQ, det ville være endnu nemmere!
Gravatar #11 - arne_v
24. jul. 2009 00:02
#9


1> Import AI
2> Solve problem
Fatal error - can not even compute whether the problem is solveable or not.


Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login