/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
metode til post count i db
Fra : G.O


Dato : 16-09-03 05:37

Jeg sidder med en tabel som er bygget op på ca. følgende måde:

id tal1 str 1 str2
1 5656565656 bbbbbbbbbbbbbb aaaaaaaaaaaaaa
2 7986868868 bbbbbbbbbbbbbb aaaaaaaaaaaaaa
3 5858484868 aaaaaaaaaaaaaaaa gggggggggggggg
4 4754858588 aaaaaaaaaaaaaaaa gggggggggggggg
5 9649469555 gggggggggggggggg gggggggggggggg
6 5786786786 gggggggggggggggg gggggggggggggg

jeg søger en metode til at tælle forekomsten af samme post i str 1 og str
2 - altså så jeg få trukket et tal ud som angiver hvor mange gange
"bbbbbbbbbbbbbb", "aaaaaaaaaaaaaaaa" og "gggggggggggggggg" blev fundet i
kolonnen str 1 - og det samme for str 2.

Kan en venlig sjæl give et tip så jeg kan komme videre ?

Med venlig hilsen

G.O



 
 
Jens Gyldenkærne Cla~ (16-09-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 16-09-03 09:51

G.O skrev:

> jeg søger en metode til at tælle forekomsten af samme post i
> str 1 og str 2 - altså så jeg få trukket et tal ud som angiver
> hvor mange gange "bbbbbbbbbbbbbb", "aaaaaaaaaaaaaaaa" og
> "gggggggggggggggg" blev fundet i kolonnen str 1 - og det samme
> for str 2.

Prøv med disse to:

SELECT str1, COUNT(*) as Antal
FROM tabel
GROUP BY str1

=>
str1    antal
bb.... 2
aa.... 2
gg.... 2


SELECT str2, COUNT(*) as Antal
FROM tabel
GROUP BY str2

=>
str1    antal
aa.... 2
gg.... 4
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Klaus Andersen (16-09-2003)
Kommentar
Fra : Klaus Andersen


Dato : 16-09-03 11:49


>
> SELECT str2, COUNT(*) as Antal
> FROM tabel
> GROUP BY str2
>
> =>
> str1 antal
> aa.... 2
> gg.... 4

Hmmm - virker fint - og tusinde tak for hjælpen .... men
nu er det godtnok sådan at jeg har et ekststerende RS som jeg looper igennem
for at hive de enkelte poster ud - og det jeg er ude efter er at jeg har
antal forekomster til at stå ud for hver enkelt post.

jeg forestiller mig et udtræk der præsentere sig ca. sådan i browseren:

id tal1 str 1 antal
str2 antal
1 5656565656 bbbbbbbbbbbbbb 1 aaaaaaaaaaaaaa 1
2 7986868868 bbbbbbbbbbbbbb 2 aaaaaaaaaaaaaa 2
3 5858484868 aaaaaaaaaaaaaaaa 1 gggggggggggggg 1
4 4754858588 aaaaaaaaaaaaaaaa 2 gggggggggggggg 2
5 9649469555 gggggggggggggggg 1 gggggggggggggg 3
6 5786786786 gggggggggggggggg 2 gggggggggggggg 4

hvis jeg lige kan få et skub i den rigtige retning vil jeg være taknemmelig.

Mvh

G.O





Jørn Andersen (16-09-2003)
Kommentar
Fra : Jørn Andersen


Dato : 16-09-03 12:03

On Tue, 16 Sep 2003 12:49:07 +0200, "Klaus Andersen"
<klaus_andersen@yahoo.com> wrote:

>Hmmm - virker fint - og tusinde tak for hjælpen .... men
>nu er det godtnok sådan at jeg har et ekststerende RS som jeg looper igennem
>for at hive de enkelte poster ud - og det jeg er ude efter er at jeg har
>antal forekomster til at stå ud for hver enkelt post.
>
>jeg forestiller mig et udtræk der præsentere sig ca. sådan i browseren:
>
>id tal1 str 1 antal
>str2 antal
>1 5656565656 bbbbbbbbbbbbbb 1 aaaaaaaaaaaaaa 1
>2 7986868868 bbbbbbbbbbbbbb 2 aaaaaaaaaaaaaa 2
>3 5858484868 aaaaaaaaaaaaaaaa 1 gggggggggggggg 1
>4 4754858588 aaaaaaaaaaaaaaaa 2 gggggggggggggg 2
>5 9649469555 gggggggggggggggg 1 gggggggggggggg 3
>6 5786786786 gggggggggggggggg 2 gggggggggggggg 4

Jeg tvivler på, at du kan klare det direkte med med SQL, men jeg er
heller ikke SQL-haj :)

Men *hvis* dine værdier er sorteret som du angiver - altså at de altid
kommer i rækkefølge - så kan du tælle op i din udskrivnings-loop ved
at sammenligne med foregående værdi. Hvis de er ens, lægges 1 til
tallet, hvis de er forskellige startes tælleren på 1 igen.

Good luck!

--
Jørn Andersen,
Brønshøj

Jens Gyldenkærne Cla~ (16-09-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 16-09-03 12:16

Klaus Andersen skrev:

>> SELECT str2, COUNT(*) as Antal
>> FROM tabel
>> GROUP BY str2

> Hmmm - virker fint - og tusinde tak for hjælpen .... men
> nu er det godtnok sådan at jeg har et ekststerende RS som jeg
> looper igennem for at hive de enkelte poster ud - og det jeg
> er ude efter er at jeg har antal forekomster til at stå ud for
> hver enkelt post.

Så skal du lave joins mellem de nye og den gamle forespørgsel.

Her er et eksempel med nogle tabeller jeg benytter:

SELECT id_enhed, e.kontaktperson, tmp.antal
FROM enheder e
INNER JOIN
   (SELECT kontaktperson, count(*) as antal
       FROM enheder   
       GROUP BY kontaktperson)
   AS tmp
ON e.kontaktperson = tmp.kontaktperson


Du skal så lave to gange joins - men princippet er det samme.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

G.O (16-09-2003)
Kommentar
Fra : G.O


Dato : 16-09-03 20:19

> SELECT id_enhed, e.kontaktperson, tmp.antal
> FROM enheder e
> INNER JOIN
> (SELECT kontaktperson, count(*) as antal
> FROM enheder
> GROUP BY kontaktperson)
> AS tmp
> ON e.kontaktperson = tmp.kontaktperson

Jeg kan godt se ideen i det - men jeg kan altså ikke finde ud af syntaks og
opbygning

min tabel ser nogenlunde sådan ud:

id mnum plac
1 5656565656 bbbbbbbbbbbbbb
2 7986868868 bbbbbbbbbbbbbb
3 5858484868 aaaaaaaaaaaaaaaa
4 4754858588 aaaaaaaaaaaaaaaa
5 9649469555 gggggggggggggggg
6 5786786786 gggggggggggggggg
7 4564564646 aaaaaaaaaaaaaaaa
8 4675475757 bbbbbbbbbbbbbb

kilden ser sådan ud:

<%
Set Con1 = Server.CreateObject("ADODB.Connection")
DBPath = "DBQ=" & server.mappath("db/m1.mdb")
Con1.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath

Sql2 = "SELECT plac, id FROM medi"
INNER JOIN ("SELECT plac, count(*) as antal FROM medi GROUP BY plac") AS tmp
ON plac = tmp.plac

Set medRS = Con1.Execute(Sql2)
%>

<% do until medRS.EOF %>

<table><tr><td><% = medRS("mnum")%></td><td><% =
medRS("plac")%></td><td>(her vil jeg gerne have talt posterne)<% =
medRS("antal")%></td><tr></tabel>

<% medRS.moveNext
Loop %>

jeg tror det hele er noget rod - men tør næsten ikke spørge mere (blir dog
nødt til det)

Hvordan skal det se ud - kan jeg få lidt mere hjælp ?

Mvh

G.O



Jens Gyldenkærne Cla~ (16-09-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 16-09-03 21:20

G.O skrev:

> Jeg kan godt se ideen i det - men jeg kan altså ikke finde ud
> af syntaks og opbygning

Kan du lave et almindeligt join? Her er syntaksen som følger:

   SELECT mitfelt
   FROM tabel1 INNER JOIN tabel2
   ON tabel1.joinfelt = tabel2.joinfelt

Man kan give tabellerne et alias - så ser det således ud:

   SELECT mitfelt
   FROM tabel1 t1 INNER JOIN tabel2 t2
   ON t1.joinfelt = t2.joinfelt


Tricket i at sammenkæde en grupperet forespørgsel med en ikke-
grupperet er at putte den grupperede forespørgsel i parenteser og
give hele parantesen et alias. For databasen ser det ud som om
parantesen er en tabel i sig selv.

   SELECT mitfelt
   FROM tabel1 t1 INNER JOIN
       ( SELECT felt2, count(*) As Antal
           FROM tabel1
           GROUP BY felt2 ) AS t2
   ON t1.felt2 = t2.felt2


Du skal så gøre det med to grupperede tabeller - men det er samme
gymnastik. Du skal blot lave et nyt join-udtryk efter det første:

   SELECT mitfelt
   FROM tabel1 t1 INNER JOIN
       ( SELECT felt2, count(*) As Antal
           FROM tabel1
           GROUP BY felt2 ) AS t2
   ON t1.felt2 = t2.felt2
       INNER JOIN
       ( SELECT felt3, count(*) As Antal
           FROM tabel1
           GROUP BY felt3 ) AS t3
   ON t1.felt3 = t3.felt3


Når du skal udvælge felter fra tabellerne i en join-forespørgsel,
vil det ofte være nødvendigt at præfikse dem med tabelnavnet (eller
det tilhørende aliasnavn) - i eksemplet ovenfor kan jeg fx ikke
bruge navnet Antal direkte i den yderste SELECT. Det er jo ikke til
at vide om man så mener Antal fra den første group by-select eller
den anden. Hvis man vil have begge værdier ud kan man skrive
således:


   SELECT mitfelt, t2.Antal AS t2Antal, t3.Antal AS t3Antal
   FROM tabel1 t1 INNER JOIN
       ( SELECT felt2, count(*) As Antal
           FROM tabel1
           GROUP BY felt2 ) AS t2
   ON t1.felt2 = t2.felt2
       INNER JOIN
       ( SELECT felt3, count(*) As Antal
           FROM tabel1
           GROUP BY felt3 ) AS t3
   ON t1.felt3 = t3.felt3


> Hvordan skal det se ud - kan jeg få lidt mere hjælp ?

Prøv at se om du kan overføre ovenstående til dine egne tabeller.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Klaus Andersen (18-09-2003)
Kommentar
Fra : Klaus Andersen


Dato : 18-09-03 12:50

> SELECT mitfelt, t2.Antal AS t2Antal, t3.Antal AS t3Antal
> FROM tabel1 t1 INNER JOIN
> ( SELECT felt2, count(*) As Antal
> FROM tabel1
> GROUP BY felt2 ) AS t2
> ON t1.felt2 = t2.felt2
> INNER JOIN
> ( SELECT felt3, count(*) As Antal
> FROM tabel1
> GROUP BY felt3 ) AS t3
> ON t1.felt3 = t3.felt3

Hmm jeg kan godt få noget ud af det - men jeg kan altså ikke helt få det til
at virke som ønsket.

Følgende eksperimenterede jeg med:
---------------------------------------
<%
Set Con1 = Server.CreateObject("ADODB.Connection")
DBPath = "DBQ=" & server.mappath("db/m1.mdb")
Con1.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath

Sql3 = "SELECT * FROM medi m1 INNER JOIN (SELECT plac, count(*) As Antal
FROM medi GROUP BY plac) AS m2 ON m1.plac = m2.plac"

Set talRS = Con1.Execute(Sql3)


do until talRS.EOF

Response.write talRS("nam") & "--" & talRS("plac") & "--" & talRS("antal") &
"<br>"

talRS.moveNext
Loop
%>
---------------------------------------------------

Tabellen m1 ser således ud:

ID nam plac
1 6456456456 bbbbbbbbbbbbbb
2 644575688 bbbbbbbbbbbbbb
3 0798674556 aaaaaaaaaaaaaaaa
4 3636476775 aaaaaaaaaaaaaaaa
5 477458468 gggggggggggggggg
6 5735678457 ggggggggggggggg
7 8484686646 aaaaaaaaaaaaaaaa
8 768884686 bbbbbbbbbbbbbb
9 76858585 aaaaaaaaaaaaaaaa

Ovenstående kildekode og tabel giver mig følgende udtræk:

6456456456--bbbbbbbbbbbbbb--3
644575688--bbbbbbbbbbbbbb--3
0798674556--aaaaaaaaaaaaaaaa--4
3636476775--aaaaaaaaaaaaaaaa--4
477458468--gggggggggggggggg--2
573567845784--gggggggggggggggg--2
848468664678--aaaaaaaaaaaaaaaa--4
768884686--bbbbbbbbbbbbbb--3
76858585--aaaaaaaaaaaaaaaa--4

Men dette tæller jo kun antallet af poster med indholdet bbbbbbbbbbbbbb,
aaaaaaaaaaaaaaaa, osv. sammen
Men det jeg ønsker er at kunne følge count ud for hver post som dette:

6456456456--bbbbbbbbbbbbbb--1
644575688--bbbbbbbbbbbbbb--2
0798674556--aaaaaaaaaaaaaaaa--1
3636476775--aaaaaaaaaaaaaaaa--2
477458468--gggggggggggggggg--1
573567845784--gggggggggggggggg--2
848468664678--aaaaaaaaaaaaaaaa--3
768884686--bbbbbbbbbbbbbb--3
76858585--aaaaaaaaaaaaaaaa--3

Altså at der ud for den første bbbbbbbbbbbbbb står 1, den næste
bbbbbbbbbbbbbb står 2 osv.

Hvis det du meget venligt har forklaret skal føre til dette, så må jeg altså
indrømme at jeg ikke fatter en dyt af det.

Er du rar og lave et eksempel med kildekode og det hele - ellers tror jeg
altå ikke at jeg fatter det.

Du må undskylde hvis jeg endnu en gang går dig på nerverne men jeg tror ikke
jeg kommer videre med det her ellers.

Mvh

G.O







Jens Gyldenkærne Cla~ (18-09-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 18-09-03 20:42

Klaus Andersen skrev:

> Men dette tæller jo kun antallet af poster med indholdet
> bbbbbbbbbbbbbb, aaaaaaaaaaaaaaaa, osv. sammen

Ja. Jeg troede at det var det du efterlyste.


> Men det jeg ønsker er at kunne følge count ud for hver post
> som dette:
>
> 6456456456--bbbbbbbbbbbbbb--1
> 644575688--bbbbbbbbbbbbbb--2

Den optælling kan, så vidt jeg kan se, ikke laves i databasen. Det
kan laves med en asp-funktion. For at holde styr på de enkelte
værdier, kan man benytte et dictionary-object - se evt her:
<http://www.w3schools.com/asp/asp_ref_dictionary.asp>

<% ' **** Det følgende eksempel er ikke testet ****

' Erklær og initialiser global variabel til
Dim d
Set d=Server.CreateObject("Scripting.Dictionary")

' Funktionen runningScore tager en tekstværdi (strVal), undersøger
' om den har set værdien før og returnerer antallet af forekomster.
Function runningScore(strVal)
   ' Undersøg først om strVal er set før
   If d.Exists(strVal) Then
       ' Hvis ja, så læg én til værdien
       d.Item(strVal) = d.Item(strVal) + 1
   Else
       ' Hvis nej, så opret nøglen med værdien 1
       d.Add strVal, 1
   End If
       
   ' Returner værdien
   runningScore = d.Item(strVal)
End Function

%>
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408934
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste