[DB/SQL] Querystring foutief

Pagina: 1
Acties:

  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 01-05 19:11
In mijn programma welke ik aan het ontwikkelen ben, loop ik tegen een aantal problemen op.
Ik heb listview waar ik -5- records in wil laten zien, indien er meer records zijn dan 5 moet hij de laatste 5 tonen.

De zoektoch begon al omdat LIMIT of LIMIT BY niet werkt onder SQL Server (2000). Dit was dus een probleem.
Ik heb wel een query gemaakt welke er voor zorgt dat ik 5 records krijgt, maar dit is dan cID 2/3/5/6/7 IPV wat het zou moeten zijn: 5,6,7,8,9.

Met de volgende query probeer ik de gegevens te limiten:
SET ROWCOUNT 5 SELECT cID,cSender,cReciever,cMessage,cTime,cDate FROM tbl_messages WHERE cSender='SYS' OR cReciever='SYS' ORDER BY cTime,cDate

Het enige probleem wat ik me zou kunnen voorstellen is dat ik niet kan selecteren op cTime en cDate omdat dit geen DateTime velden zijn, maar gewoon VarChars, dit omdat ik het vrij lastig vind om deze te gebruiken.
code:
1
2
3
4
5
6
7
8
cID    cTime       cDate        cSender cReciever       cMessage
2       21:39       24/04/2005  SYS              EN     Message 1 TEST
3       21:44       24/04/2005  EN              SYS     Message 2 READ
5       12:08       25/04/2005  SYS              EN     Message 3 SLUT
6       12:09       25/04/2005  SYS              EN     Message 4 NONE ?
7       12:10       25/04/2005  EN              SYS     Message 5 WHY ?
8       12:11       25/04/2005  SYS              EN     Message 6 BECAUSE !
9       12:12       25/04/2005  EN              SYS     Message 7 NO!!

Heeft een van jullie een idee wat ik als SQL Query zou kunnen gebruiken om de juiste gegevens uit de database te krijgen ?

[ Voor 9% gewijzigd door MikevanEngelen op 25-04-2005 20:21 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:52
tip: top. (da's beter dan rowcount)

En waarom heb je in godsnaam datum en tijdvelden in een varchar gepropt ? Dan verlies je alle functionaliteit (ja, ook het sorteren). Dus: maak daar maar datetime velden van.

[ Voor 92% gewijzigd door whoami op 25-04-2005 20:29 ]

https://fgheysels.github.io/


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
MikevanEngelen schreef op maandag 25 april 2005 @ 20:19:
Het enige probleem wat ik me zou kunnen voorstellen is dat ik niet kan selecteren op cTime en cDate omdat dit geen DateTime velden zijn, maar gewoon VarChars, dit omdat ik het vrij lastig vind om deze te gebruiken.
Bite the bullet. Uitsplitsen van een datetime in 2 velden in plaats van gewoon de native functionaliteit gebruiken is een gebed zonder eind. En als je dat gedaan hebt even TOP opzoeken in de handleiding.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
SELECT TOP 5 *
FROM Tabel
ORDER BY ID DESC

Oops! Google Chrome could not find www.rijks%20museum.nl


  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 01-05 19:11
'P_de_B' gaf hier idd de oplossing.
Nu moet ik eerlijk toegeven dat ik TOP ook al had geprobeerd, maar dat zonder DESC niet de gewenste resultaat opleverd.
Hij geeft nu wel de juiste records, maar wil dat hij ze omdraait. Dus eigelijk wil ik ze ASC hebben, maar dan nummert hij dus wel weer vanaf ID 1/2/3/4 etc. terwijl met DESC begint hij bij ID 7/6/5/4 etc.

Iemand hier ook nog een oplossing voor, anders moet ik de boel gaan toevoegen aan een array(lees collection) en verkeerd om in de listview inlezen, lijkt me beetje dubbelop werk (het is misschien wel functioneel, maar niet zo netjes denk ik zo).

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je kunt ze wel weer andersom krijgen met een subquery, maar ik zou ze gewoon aan de clientkant even omdraaien.

Als je het perse in SQL code wilt doen:

code:
1
2
3
4
5
SELECT * FROM (
SELECT TOP 5 *
FROM Tabel
ORDER BY ID DESC)A
ORDER BY ID


Als je de TOP operator gebruikt moet je sowieso altijd goed letten op de ORDER BY, die is nl. erg belangrijk. Daarmee geef je aan welke TOP n records je terug wilt hebben.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:52
De enige juiste oplossing is om je datums in een datetime veld te bewaren, en niet in een varchar.

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
whoami schreef op dinsdag 26 april 2005 @ 09:00:
De enige juiste oplossing is om je datums in een datetime veld te bewaren, en niet in een varchar.
Dat had ik nog niet eens gelezen :X

Je moet inderdaad de datumvelden gebruiken, ook al heb je nu wat problemen met het aanpassen je zult nog veel meer problemen krijgen als je het niet aanpast.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:25
En zo moelijk is het niet dat datetime veld. Er is ook zat over te vinden in de Books Online. Doe het alsjeblieft, het is gewoon beter en het gaat je in toekomst een hoop ellende schelen. En als je ergens echt niet uit komt kan je het altijd hier posten.

Roomba E5 te koop

Pagina: 1