[ASP/SQL] Sorteren op laatste reactie werkt niet.

Pagina: 1
Acties:

  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08-2025
Mensen, ik heb even jullie hulp nodig.

Ik zal het even kort uitleggen.

Ik heb een database met 2 tabellen. 1 tabel is voor de topics, de andere tabel is voor de reacties die horen bij een bepaalde topic.

Nu wil ik in het topic overzicht onder andere kunnen sorteren op laatste reactie. Dus het topic met de laatste reactie komt bovenaan te staan.

Nu staan de data van de reacties in de 2e tabel. Ik heb al geprobeerd dmv sql het voor elkaar te krijgen om met 1 query velden uit de 1e tabel, en de laatste datum uit de 2e tabel op te halen. Echter zonder succes.

sSQL = "SELECT tblNewsItems.dtDate, tblNewsItems.intNewsID, tblNewsItems.strTitle, tblNewsItems.strPoster from tblNewsItems INNER JOIN tblReply ON tblNewsItems.intNewsID = tblReply.intNewsID ORDER BY tblReply.dtDate DESC"

Hij geeft het dmv van bovenstaande query deels, maar niet juist.

Nu krijg ik afzonderlijk dmv deze sql query uiteraard gewoon de laatste reactie. Deze komt echter in de loop wanneer alle topics worden geplaatst, maar wanneer ik moet kunnen sorteren op laatste reactie in het topic overzicht moet ie dus in de bovenstaande query komen:

sSQL3 = "SELECT intMessageID, dtDate from tblReply where intNewsID = " & intNewsID & " ORDER BY intMessageID DESC"

Hebben jullie nog ideeen over hoe het me wel zou kunnen lukken?

Voetbal is de belangrijkste bijzaak in het leven.


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:03
Ik verveelde me, zelf even tabellen en velden aanpassen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
    Topics.title,
    MAX(Posts.datum) AS datum
FROM
    Topics
INNER JOIN
    Posts
ON
    Topics.id = Posts.topicID
GROUP BY
    Topics.title
ORDER BY
    datum DESC

Roomba E5 te koop


  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08-2025
sig69 schreef op donderdag 13 januari 2005 @ 17:22:
Ik verveelde me, zelf even tabellen en velden aanpassen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
    Topics.title,
    MAX(Posts.datum) AS datum
FROM
    Topics
INNER JOIN
    Posts
ON
    Topics.id = Posts.topicID
GROUP BY
    Topics.title
ORDER BY
    datum DESC
Dit heb ik idd al geprobeerd en kreeg hierbij de volgende foutmelding:

You tried to execute a query that does not include the specified expression intNewsID' as part of the aggregate function.

Ik heb dit proberen te verhelpen, zonder succes.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
    tblNewsItems.intNewsID, 
    tblNewsItems.strTitle, 
    tblNewsItems.strPoster, 
    MAX(tblReply.dtDate) AS Datum
FROM 
    tblNewsItems 
INNER JOIN 
    tblReply 
ON 
    tblNewsItems.intNewsID=tblReply.intNewsID
GROUP BY 
    tblNewsItems.strTitle
ORDER BY 
    Datum DESC;


Haal ik tblNewsItems.intNewsID eruit, geeft ie dezelfde error op strPoster...

Ik geef meteen even de database structuur van beide tabellen:

tblNewsItems:
intNewsID
dtDate
strPoster
strTitle
strMessage
..

tblReply:
intMessageID
intNewsID
dtDate
strAuthor
strMessage
..

[ Voor 38% gewijzigd door NiMu83 op 13-01-2005 17:51 ]

Voetbal is de belangrijkste bijzaak in het leven.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Als je group by gebruikt moet je een aggregated functie gebruiken op elke kolom waar je niet op grouped.
Waarschijnlijk wil je in dit geval op meer velden groupen.

[ Voor 23% gewijzigd door justmental op 13-01-2005 17:55 ]

Who is John Galt?


  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08-2025
justmental schreef op donderdag 13 januari 2005 @ 17:54:
Als je group by gebruikt moet je een aggregated functie gebruiken op elke kolom waar je niet op grouped.
Waarschijnlijk wil je in dit geval op meer velden groupen.
Wanneer ik de group by op elke veld gebruik, en niet die SUM, dan (getest in Access) komt hij met een popup waar ik iets kan invullen voor het veld Datum.
Wanneer ik niks invul krijg ik wel de gehele lijst, echter niet gesorteerd op Datum (laatste reactie)

Volgens mij is er een wat meer complexere SQL query nodig om het voor elkaar te kunnen krijgen, en niet een MAX op je datum veld.

Echter kom ik hier niet uit...

[ Voor 34% gewijzigd door NiMu83 op 13-01-2005 18:06 ]

Voetbal is de belangrijkste bijzaak in het leven.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

code:
1
2
3
4
5
6
7
SELECT tblNewsItems.dtDate, tblNewsItems.intNewsID
, tblNewsItems.strTitle, tblNewsItems.strPoster
, max(tblReply.dtDate) as datum
from tblNewsItems INNER JOIN tblReply ON tblNewsItems.intNewsID = tblReply.intNewsID 
GROUP BY tblNewsItems.dtDate, tblNewsItems.intNewsID
, tblNewsItems.strTitle, tblNewsItems.strPoster
ORDER BY datum DESC

[ Voor 76% gewijzigd door justmental op 13-01-2005 18:19 ]

Who is John Galt?


  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08-2025
@ justmental

Hij blijft het niet doen. In access moet ik een value invullen voor datum wanneer ik de query run, en een asp pagina zegt ie:
"No value given for one or more required parameters."

Wanneer ik in access geen value invoeren en gewoon op OK klik sorteerd ie iig niet op laatste reactie (datum)

[ Voor 24% gewijzigd door NiMu83 op 13-01-2005 19:32 ]

Voetbal is de belangrijkste bijzaak in het leven.


  • erkje
  • Registratie: Oktober 2001
  • Laatst online: 12-06-2024
Je kunt, ten bate van de performance / overhead) een stukje reduntantie toepassen (en het hele probleem omzeilen, 't is niet echt een oplossing voor je probleem).

in de tabel Topic neem je dan een veld LastPostDatum op. Bij elk bericht dat dan gepost wordt, wijzig je deze datum in je Topic-tabel. Nu hoeven er geen joins te worden uitgevoerd en max-berekeningen. Ik neem aan dat je stukken meer lees-acties krijgt dan dat er een bericht wordt toegevoegd...

taste and see that the Lord is good


  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08-2025
erkje schreef op donderdag 13 januari 2005 @ 19:35:
Je kunt, ten bate van de performance / overhead) een stukje reduntantie toepassen (en het hele probleem omzeilen, 't is niet echt een oplossing voor je probleem).

in de tabel Topic neem je dan een veld LastPostDatum op. Bij elk bericht dat dan gepost wordt, wijzig je deze datum in je Topic-tabel. Nu hoeven er geen joins te worden uitgevoerd en max-berekeningen. Ik neem aan dat je stukken meer lees-acties krijgt dan dat er een bericht wordt toegevoegd...
Dat is idd zeker zo. Al zou ik dit probleem wel opgelost willen zien middels die ene query...Al is het maar voor het leerproces. De oplossing die jij noemt is eigenlijk te makkelijk :)

Voetbal is de belangrijkste bijzaak in het leven.


  • erkje
  • Registratie: Oktober 2001
  • Laatst online: 12-06-2024
Ik heb ook ooit een forum gemaakt (topics, reacties, geen categorieën ofzo). even in de code gekeken, want dat stamt nog uit 2002 meen ik, maar ik heb het op een nog lelijker manier opgelost.

Onderwerpen ophalen
While (onderwerp)
voer nog een paar queries uit :P

Nou is het op zich niet zo zwaar met 75 gebruikers, maar 't is toch niet zo mooi. Ach ja, toen had ik nog niet zoveel ervaring he. Maar ik zou het tegenwoordig wel op de manier doen die ik hier al eerder noemde. Een beetje redundatie in ruil voor performance zeg maar.

Om even ontopic te komen...
Ik denk dat een
GROUP BY tblReply.intNewsID
je zou kunnen helpen. (niet getest, maar dat lijkt me logisch)

taste and see that the Lord is good


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:03
De query die ik postte komt rechtstreeks uit de query analyser van sqlserver, en daar werkt hij. Mijn acces kennis is helaas wat weggezakt...

Roomba E5 te koop


  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08-2025
erkje schreef op vrijdag 14 januari 2005 @ 15:34:
Om even ontopic te komen...
Ik denk dat een
GROUP BY tblReply.intNewsID
je zou kunnen helpen. (niet getest, maar dat lijkt me logisch)
Helpt niet...krijg nog steeds dezelfde error.

@ sig69..
Ja ik snap er ook niks van, hij wil het gewoon niet doen... :S

[ Voor 12% gewijzigd door NiMu83 op 14-01-2005 20:18 ]

Voetbal is de belangrijkste bijzaak in het leven.

Pagina: 1