Avatar billede sp Nybegynder
23. april 2003 - 14:29 Der er 18 kommentarer og
1 løsning

SQL-forespørgsler til arkiv i debatforum

Du er her : Eksperten : Programmering : Script : ASP : debat-arkiv med 2 slags tråde :


Sidste nyt fra Eksperten : Eksperten har været nede
Eksperten har været ramt af alvorlige tekniske problemer, der har betydet, at sitet har været nede hele weekenden. Det beklager vi. Nedetiden blev ekstra lang, da vores overvågningssoftware også har f... læs mere



debat-arkiv med 2 slags tråde    100 point fra sp
Luk annonce  Hej eksperter:-)

Jeg er igang med at lave arkiv-delen i et debat-forum.

Jeg har nogle poster i en database. Hver post har 2 felter med 2 tidspunkter. Felterne hedder "Posted" og "Followed".

Den øverste post i en tråd kan man se ved at "Posted" og "Followed" er ens.

Er posten besvaret er "Posted" og "Followed" forskellige
Man kan se hvilke indlæg der hører sammen i en tråd ved at se at "Posted" er ens.

Billede af databasens indhold:

[Posted]    [Followed]
[Tidspunkt1]  [Tidspunkt1] (Første indlæg i tråden)
[Tidspunkt1]  [Tidspunkt2] (Besvarelse)
[Tidspunkt1]  [Tidspunkt3] (Besvarelse)

I arkiv-delen vil jeg vise de indlæg hvor det f.eks. er 30 dage siden der sidst har været debat i tråden.

Dette har jeg fået til at virke ved at bruge 2 SQL-sætninger.
fdays tidspunktet nu minus 30 dage

Først finder jeg det sidste indlæg i tråden:
"Followed" skal være mindre end eller af lig med 30 og "Posted" og "Followed" skal være forskellige.

Set rs = Conn.Execute ("SELECT Top 1 * FROM " & username & " WHERE Followed <= '" & fdays & "' AND Posted <> Followed ORDER BY Followed DESC;")

Så finder jeg det første indlæg i hver tråd

SQL="SELECT * FROM " & username & " WHERE Posted < '" & rs("Posted") & "' AND Posted = Followed AND Trash=0 ORDER BY Posted DESC, Followed ASC;"

Nu får jeg vist alle tråde hvor det er 30 dage siden der sidst har været debat i tråden.

Nu kommer så problemet:
Problemet er at hvis der ikke er nogle der har svaret på indlægget har der jo ikke være nogen debat. Jeg vil gerne have arkiveret de tråde hvor der ikke har været nogen debat.
Så mit arkiv skal vise:
Hvis tråden kun indeholder 1 indlæg, så skal det vises hvis det er 30 dage gammelt.
Hvis tråden indeholder mere end 1 indlæg, så skal tråden vises hvis det sidste indlæg i tråden er 30 dage gammelt.

På denne måde skal det være en kombination. 2 slags tråde.
Kan man lave en SQL-forspørgsel som kan kombinere det?

mvh
SP
Avatar billede techhouse Nybegynder
23. april 2003 - 19:33 #1
kan denne ikke bruges igen... :o)

select t1.* from " & username & " t1 left join " & username & " t2 on (t1.Prosted<t2.Posted) and t1.Posted=t1.Followed and t1.Trash=0 ORDER BY t1.Posted DESC, t1.Followed ASC
Avatar billede sp Nybegynder
23. april 2003 - 19:49 #2
Fejl:
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E21)
ODBC driver does not support the requested properties.
/debat/arkiv.asp, line 60


set rsClients= Server.CreateObject("ADODB.RecordSet")

SQL = "select t1.* from " & username & " t1 left join " & username & " t2 on (t1.Posted< t2.Posted) and t1.Posted=t1.Followed and t1.Trash=0 ORDER BY t1.Posted DESC, t1.Followed ASC;"

rsClients.Open SQL, Conn, 1


If Not (rsClients.BOF AND rsClients.EOF) Then
Avatar billede sp Nybegynder
23. april 2003 - 21:55 #3
Jeg har også lige et spørgsmål. Hvad er t1 og t2 for noget?
Avatar billede terry Ekspert
23. april 2003 - 21:56 #4
Alias names for the tables
Avatar billede sp Nybegynder
23. april 2003 - 22:00 #5
aha nu er jeg med
Avatar billede sp Nybegynder
23. april 2003 - 22:01 #6
Det er et og samme table!
Avatar billede sp Nybegynder
23. april 2003 - 22:16 #7
Hvor kommer fdays ind. Den kan jeg ikke se?
Avatar billede venne Nybegynder
24. april 2003 - 10:14 #8
Hvad med noget i denne retning:

SELECT Posted
FROM tabel
GROUP BY Posted
HAVING MAX(Followed) < DATEADD(d, -30, GETDATE())

Den grupperer efter Posted og finder den seneste Followed indenfor hver gruppe og sammenligner den med dags dato minus 30 dage.

/venne
Avatar billede sp Nybegynder
24. april 2003 - 10:54 #9
Så skulle det være sådan her.

SELECT * FROM " username & " GROUP BY Posted
HAVING MAX(Followed) < '" & fdays & "'

Den prøver jeg
Avatar billede venne Nybegynder
24. april 2003 - 11:01 #10
Nja, du kan ikke SELECT * når du har GROUP BY. Men du kan gøre sådan:

SELECT * FROM " & username & " WHERE Posted IN (
SELECT Posted FROM " & username & "
GROUP BY Posted HAVING MAX(Followed) < '" & fdays & "')

Formateringen med " og & osv er sikkert ikke helt rigtig, men ideen er at lave en ny SELECT uden om til at hente alle kolonnerne.

/venne
Avatar billede sp Nybegynder
24. april 2003 - 11:03 #11
Jeg prøver denne
Avatar billede sp Nybegynder
24. april 2003 - 18:05 #12
Jeg har tilføjet lidt til den:
SELECT * FROM " & username & " WHERE Posted = Followed AND Trash=0 AND Posted IN (SELECT Posted FROM " & username & " GROUP BY Posted HAVING MAX(Followed) < '" & fdays & "') ORDER BY Posted DESC, Followed ASC

Det ser ud til at virke som det skal.
Avatar billede sp Nybegynder
25. april 2003 - 11:05 #13
Jeg sidder med acces. Det er en fejl at jeg har oprettet mit spm her, men det virker alligevel - simpel SQL
Kan man også sige??:

SELECT COUNT (*) FROM " & username & " WHERE Posted = Followed AND Trash=0 AND Posted IN (SELECT Posted FROM " & username & " GROUP BY Posted HAVING MAX(Followed) < '" & fdays & "') ORDER BY Posted DESC, Followed ASC
Avatar billede venne Nybegynder
25. april 2003 - 11:10 #14
Ja hvorfor ikke - dog skal ORDER BY nok fjernes.
Avatar billede sp Nybegynder
25. april 2003 - 11:15 #15
nåh ja den kan man vist undvære
Avatar billede sp Nybegynder
25. april 2003 - 12:26 #16
Og hvis jeg vil have samtlige indlæg, skal jeg vel bare fjerne "Posted = Followed" ??
SELECT COUNT (*) FROM " & username & " WHERE Trash=0 AND Posted IN (SELECT Posted FROM " & username & " GROUP BY Posted HAVING MAX(Followed) < '" & fdays & "') ORDER BY Posted DESC, Followed ASC


Nåh det var ihvertfald noget jeg kunne bruge!
Nu er jeg lidt forvirret over at jeg kan bruge det fra denne kategori. Spørgsmålet er nu hvor jeg skal oprette mine spm. fremover i Acces eller MS  SQL. Jeg har et spm som jeg havde store problemer med i "Acces". Det som har virket bedst, er de svar som jeg har fået i MS SQL... Det er underligt ikke?

Vil du ikke have nogle point?
Avatar billede venne Nybegynder
25. april 2003 - 13:04 #17
Jo, giv mig bare nogle points!

Det med kategorien skyldes måske at de bedste SQL-hajer hænger ud her i MS SQL...

/venne
Avatar billede sp Nybegynder
25. april 2003 - 13:25 #18
nåh det er ellers ærgeligt når det jo er acces jeg sidder med.
Avatar billede sp Nybegynder
25. april 2003 - 13:28 #19
Du kan også prøve at se denne store tråd:
http://www.eksperten.dk/spm/344344

Der er prøvet meget, som ser rigtigt ud, men det giver bare fejl indtil til sidst...
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
Computerworld tilbyder specialiserede kurser i database-management

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