Avatar billede pelskee Nybegynder
09. marts 2004 - 12:12 Der er 29 kommentarer og
3 løsninger

Database udtræk - sortering og udtræk fra flere tabeller

Jeg bruger Access database og har virkelig brug for hjælp til at få styr på 2 udtræk fra databasen.

1. ISSUE

SELECT COUNT (IDthread) AS Flest, IDuser
FROM thread, users
WHERE userID = IDuser GROUP BY IDuser

jeg vil gerne have den skal sorteres så den user med flest threads kommer øverst



2. ISSUE

SELECT LEFT(Headline,50), Name, Views, IDuser, IDthread
FROM thread, users
WHERE userID = IDuser
ORDER BY IDthread DESC

jeg vil samle 3 tabeller thread, users, posts og vise:
1. thread.Headline de 50 første tegn (overskriften til denne thread)
2. lave en sammentælling på hvor mange posts der er tilknyttet denne thread (antal svar/posts)
3. users.Name (navnet på den som har oprettet denne thread)
4. thread.Views (antallet af gange brugerne har været inde og se på denne thread)
5. sidste indlæg dvs. vise tidspunktet (posts.CreateDate + posts.CreateTime) for den sidste post knyttet til denne thread

Link: http://www.gutternes.dk/forum.asp

thread indeholder indlæg i mit forum, den har følgende kolonner:
IDthread
userID
Headline
Texfield
CreateDate
CreateTime
Views

users indeholder info omkring mine brugere, jeg vil udtrækker følgende kolonner:
IDuser
Name

posts indeholder svar til indlæg i forumet, den har følgende kolonner:
IDpost
userID
threadID
Headline
Textfield
CreateDate
CreateTime

jeg bruger icq og msn hvis nogen synes det er lettere :)
Avatar billede dk_akj Nybegynder
09. marts 2004 - 12:30 #1
1)
SELECT COUNT (IDthread) AS Flest, IDuser
FROM thread, users
WHERE userID = IDuser GROUP BY IDuser order by flest desc

//akj
Avatar billede pelskee Nybegynder
09. marts 2004 - 12:33 #2
den går ikke: Microsoft JET Database Engine error '80040e10'

No value given for one or more required parameters.

/forum.asp, line 27
Avatar billede dk_akj Nybegynder
09. marts 2004 - 12:36 #3
Kan du evt. sende mig din db/uploade den ??

For at overholde reglerne på E bliver jeg nødt til at uploade den til min HP bagefter så alle kan se løsningen.

//akj
Avatar billede pelskee Nybegynder
09. marts 2004 - 12:46 #4
sender email til din hotmail konto
Avatar billede dk_akj Nybegynder
09. marts 2004 - 14:01 #5
Check lige din mail. Jeg kunne ikke modtage filen.

//akj
Avatar billede the_bma_man Nybegynder
09. marts 2004 - 18:22 #6
SELECT COUNT (IDthread) AS Flest, IDuser
FROM thread, users
WHERE userID = IDuser GROUP BY IDuser order by count(IDthread) desc

Du kan ikke bruge aliaset i order by delen.
Avatar billede pelskee Nybegynder
10. marts 2004 - 11:09 #7
sender databasen igen :) - pakket i .rar
Avatar billede pelskee Nybegynder
10. marts 2004 - 11:09 #8
the_bma_man - det er rigtigt fandt selv ud af det i går :) - tak
så er der bare THE BIG ONE tilbage
Avatar billede dk_akj Nybegynder
10. marts 2004 - 14:07 #9
Du skal lave to queries

count_tread:
SELECT threadid, count(threadid) AS antal
FROM posts
GROUP BY threadid;



time_thread:
SELECT threadid, max(cdate(datevalue(createdate) & ' ' & timevalue(createtime))) as seneste
FROM posts
GROUP BY threadid;



Din "rapport" trækker du ud med denne sql:

SELECT Left(Headline,50) AS Expr1, users.Name, thread.Views, users.IDuser, thread.IDthread, count_thread.antal, time_thread.seneste
FROM thread, users, count_thread, time_thread
WHERE thread.userID=IDuser And count_thread.threadid=IDthread and time_thread.threadid=IDthread
ORDER BY thread.IDthread DESC;


//akj
Avatar billede pelskee Nybegynder
10. marts 2004 - 14:16 #10
ok - det prøver jeg lige
Avatar billede pelskee Nybegynder
10. marts 2004 - 14:21 #11
Microsoft JET Database Engine error '80040e37'
The Microsoft Jet database engine cannot find the input table or query 'count_thread'. Make sure it exists and that its name is spelled correctly.
/forum.asp, line 33

koden:
<%
Dim count_tread
Dim count_tread_numRows

Set count_tread = Server.CreateObject("ADODB.Recordset")
count_tread.ActiveConnection = MM_gutternes_STRING
count_tread.Source = "SELECT threadid, count(threadid) AS antal  FROM posts  GROUP BY threadid;  "
count_tread.CursorType = 0
count_tread.CursorLocation = 2
count_tread.LockType = 1
count_tread.Open()

count_tread_numRows = 0
%>
<%
Dim time_thread
Dim time_thread_numRows

Set time_thread = Server.CreateObject("ADODB.Recordset")
time_thread.ActiveConnection = MM_gutternes_STRING
time_thread.Source = "SELECT threadid, max(cdate(datevalue(createdate) & ' ' & timevalue(createtime))) as seneste  FROM posts  GROUP BY threadid"
time_thread.CursorType = 0
time_thread.CursorLocation = 2
time_thread.LockType = 1
time_thread.Open()

time_thread_numRows = 0
%>
<%
Dim rsThreads
Dim rsThreads_numRows

Set rsThreads = Server.CreateObject("ADODB.Recordset")
rsThreads.ActiveConnection = MM_gutternes_STRING
rsThreads.Source = "SELECT Left(Headline,50) AS Expr1, users.Name, thread.Views, users.IDuser, thread.IDthread, count_thread.antal, time_thread.seneste  FROM thread, users, count_thread, time_thread  WHERE thread.userID=IDuser And count_thread.threadid=IDthread and time_thread.threadid=IDthread  ORDER BY thread.IDthread DESC"
rsThreads.CursorType = 0
rsThreads.CursorLocation = 2
rsThreads.LockType = 1
rsThreads.Open()

rsThreads_numRows = 0
%>
Avatar billede dk_akj Nybegynder
10. marts 2004 - 14:36 #12
De 2 query's skal du lave i access. har du dansk version mener jeg den hedder forespørgsler eller sådan noget.

//akj
Avatar billede mvk Nybegynder
10. marts 2004 - 15:32 #13
thankz man - det kører - jubiiiiiiiiiiii.

MEN det virker kun på 1 record. når jeg laver Repeat Region viser den ikke de andre records. Any ideas ?
Avatar billede pelskee Nybegynder
10. marts 2004 - 15:34 #14
my bad - wrong account. sad og checkede det på en kollegas pc
Avatar billede pelskee Nybegynder
10. marts 2004 - 15:57 #15
det virker kun på 1 record. når jeg laver Repeat Region viser den ikke de andre records. kan "vi" fikse det :) ?
Avatar billede dk_akj Nybegynder
11. marts 2004 - 09:24 #16
Jeg er lost... hvad mener du med repeat region ??

//akj
Avatar billede pelskee Nybegynder
11. marts 2004 - 10:17 #17
http://www.gutternes.dk/forum.asp - den viser kun 1 record selvom der er oprettet 169 threads.

med repeat mener jeg bare koden:
    <%
While ((Repeat1__numRows <> 0) AND (NOT rsThreads.EOF))
%>
    <tr>
        <form name="form1" method="POST" action="<%=MM_editAction%>">
          <td height="20">
              <a href="java script:document.forms['form1'].submit()"><%=(rsThreads.Fields.Item("Expr1").Value)%></a>
              <input name="Views" type="hidden" id="Views" value="<%=(rsThreads.Fields.Item("Views").Value)+1%>">
              <input type="hidden" name="MM_update" value="form1">
              <input type="hidden" name="MM_recordId" value="<%= rsThreads.Fields.Item("IDthread").Value %>">
              <input name="IDthread" type="hidden" id="IDthread" value="<%=(rsThreads.Fields.Item("IDthread").Value)%>">
          </td>
        </form>
        <td align="center" class="black9"><%=(rsThreads.Fields.Item("antal").Value)%></td>
        <td align="center"><a href="profil.asp?IDuser=<%=(rsThreads.Fields.Item("IDuser").Value)%>" class="black9"><%=(rsThreads.Fields.Item("Name").Value)%></a></td>
        <td align="center" class="black9"><%=(rsThreads.Fields.Item("Views").Value)%></td>
        <td class="black9">&nbsp;<%=(rsThreads.Fields.Item("seneste").Value)%></td>
    </tr>
    <%
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  rsThreads.MoveNext()
Wend
%>
Avatar billede dk_akj Nybegynder
11. marts 2004 - 13:28 #18
Det er fordi der kun er en threadid i din "posts" tabel.

//akj
Avatar billede mvk Nybegynder
11. marts 2004 - 13:42 #19
hvordan kan/bør jeg så gøre det ?
Avatar billede dk_akj Nybegynder
11. marts 2004 - 15:29 #20
Du kan da lige starte med at lukke et af dine brugernavne !!!

//akj
Avatar billede pelskee Nybegynder
11. marts 2004 - 15:49 #21
my bad - det er fordi jeg rykker lidt rundt herinde på kontoret. flere af os har konti til eks.dk og jeg havde ikke lagt mærke til at det var en anden som var logget på.
Avatar billede pelskee Nybegynder
11. marts 2004 - 18:51 #22
er der ikke en måde at få alle "threads" med ?
skal det være gennem de queries der ligger i access ?
Avatar billede dk_akj Nybegynder
11. marts 2004 - 20:18 #23
Der skal jo være en relation mellem post og thread. Alle threads bør vel have minimum en post.

Skal jeg være helt ærlig tror jeg ikke en skid på din forklaring......
Jeg har lige søgt lidt rundt her på E.

http://www.eksperten.dk/spm/407843 oprettet af mvk
http://www.eksperten.dk/spm/470502 oprettet af mvk

http://www.eksperten.dk/spm/420267 oprettet af enrik
Er "enrik" også en kollega ??

Det lugter...

//akj
Avatar billede pelskee Nybegynder
12. marts 2004 - 11:13 #24
enrik er mvk's bror - Henrik Vind-Knudsen - han lavede det forrige site.

nu sidder jeg og mvk og laver det nye site - det er vel fair nok at man er flere om at lave det og så når mvk render ind i probs opretter han et ? og når jeg ikke kan nå videre opretter jeg et spørgsmål. jeg ved ikke om det er imod ekspertens regler, men jeg synes det burde være ok
Avatar billede pelskee Nybegynder
12. marts 2004 - 11:15 #25
en thread har ingen post før det oprettes et "svar" til den pågældende thread
Avatar billede dk_akj Nybegynder
12. marts 2004 - 11:58 #26
OK

Uden en record i post til hver thread vil det ikke virke.

Du skal flytte beskeden over i posts istedet for at have den i threads så der altid vil være en record i posts til hver thread.

//akj
Avatar billede mvk Nybegynder
12. marts 2004 - 12:02 #27
kan jeg lave det med sådan en queries som du viste tidligere ?
Avatar billede dk_akj Nybegynder
12. marts 2004 - 21:46 #28
Nej, du skal sørge for at oprette en record i post tabellen når du opretter en ny thread.

Og så bruger du igen forkert brugernavn....

//akj
Avatar billede pelskee Nybegynder
22. marts 2004 - 10:01 #29
jeg fik den lavet med en sql:
SELECT LEFT(thread.Headline,35) AS Headline50, Name, thread.Views, thread.IDthread, IDuser, thread.CreateDate, thread.CreateTime, COUNT (t1.threadID) as Svar
FROM (thread LEFT JOIN [users] ON thread.userID = users.IDuser) LEFT JOIN thread as t1 ON  thread.IDthread = t1.threadID
WHERE thread.threadID = 0  GROUP BY LEFT(thread.Headline,35), Name, thread.Views, thread.IDthread, IDuser, thread.CreateDate, thread.CreateTime
ORDER BY thread.IDthread DESC
Avatar billede pelskee Nybegynder
22. marts 2004 - 10:02 #30
den er fanme vild :) - men den virker uden queries i databasen
Avatar billede pelskee Nybegynder
22. marts 2004 - 10:03 #31
tak for al din hjælp
Avatar billede dk_akj Nybegynder
22. marts 2004 - 11:01 #32
selvtak

//akj
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester