Toon posts:

sql ordering

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

ik maak dus mijn eigen forum. Kzal hier kort uitleggen hoe hij opgebouwd is.
Ik heb 3 tabellen:
1ste = de grote kiestopics.
de 2de de daaronder gelegen gemaakte topics van gebruikers.
En een 3de voor de reacties van de 2.
(tabel1 tabel2 en tabel3: zo is er geen betwisting van naam verwarringen.
nu is men vraag: ik zou graag de laatste 10 actieve topics laten verschijnen. Dit wil dus zeggen als een unieke id wordt gewijzigd in tabel3 dan zou tabel2 de laatst gewijzigde moeten zijn en dus bij ascending ordening dus vanboven moeten staan.

Ik weet bij god niet hoe ik die sql moeten opbouwen. Kan iemand mij tips geven. Of tenminste voorbeeldje :)

code:
1
sql=" select * from ....... "


dank je

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 27-05 17:26

Super_ik

haklust!

als je een datum bijvoegt bij tabel 3 dan mischien iets met sort doen
select tabel2_id from tabel3 order by datum group by tabel2_id limit 10 ofzoiets :?

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Het zou ook handig zijn als je de opbouw van de tabellen zou tonen.
Welk DBMS gebruik je?
Wat heb je al geprobeerd?

[ Voor 13% gewijzigd door MatHack op 28-02-2004 13:27 ]

There's no place like 127.0.0.1


Verwijderd

Topicstarter
tabel 1: forumId, forumHoofdTopics
tabel 2: subId, controleId, subTitel, subBericht, subDatum
tabel 3: reactId,subcontroleId,reacties,reactiesuurendag

ik gebruik access databases.

als ik laatste datum neem van de reacties kan het zijn dat ik 10 keer de laatste actieve topics heb hé. het is de bedoeling om de laatste actieve topic er maar 1 keer neer te pennen en dan de 2de actieve topic. hopelijk snapt iemand deze verwarde uitleg

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:13

Dido

heforshe

Ik zie geen relaties tussen je drie tabellen :?

Wat betekent mijn avatar?


Verwijderd

Topicstarter
er zijn wel relaties

forumId naar controleId
controleId naar subControlereactiesId

dit is dus maar rap uit het hoofd dus de naam kan ietske op een detail verschillen.

  • ixi
  • Registratie: December 2001
  • Laatst online: 17-05 17:12

ixi

Wilde gok:

SELECT DISTINCT subcontroleId FROM tabel3 LIMIT 10 ORDER BY reactiesuurendag ASC

edit.. wel de goede namen gebruiken 8)7

[ Voor 41% gewijzigd door ixi op 28-02-2004 13:40 ]


Verwijderd

Topicstarter
hmmm noem je dit een wilde gok? :p

uhum,
mja ik leer via http://www.w3schools.com/sql/ en al die functies zie ik spijtig genoeg ni staan. Kzal wel eens dieper zoeken.

alvast merci ik het eens aanpassen en testen.

mvg andy

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:13

Dido

heforshe

Je hebt nu dus records in tabel3 die direct aan tabel1 hangen. Wat is daar het nut van :?
Normaliter gebruik je iets als:
Tabel1: tabel1ID, blaat
Tabel2: tabel2ID, tabel1ID, blaat
Tabel3: tabel3ID, tabel2ID, blaat

Het is op dit moment niet duidelijk wat voor relaties je nu precies hebt gelegd: ik kan alles uit tabel drie halen met een key uit tabel1, zonder dat ik tabel2 nodig heb.

Wat betekent mijn avatar?


  • Noork
  • Registratie: Juni 2001
  • Niet online
ixi schreef op 28 februari 2004 @ 13:37:
Wilde gok:

SELECT DISTINCT -topic-id- FROM reacties LIMIT 10 ORDER BY datum ASC
maar dan moet je dus wat met tabel 2 doen. Dus meer iets zoals

select * from tabel2 where subid = (SELECT DISTINCT -topic-id- FROM reacties LIMIT 10 ORDER BY datum ASC)

Verwijderd

Topicstarter
dank je noork,

dido, 1 hangt niet aan 3

1 hangt aan 2 en 3 hangt aan 2.

toch bedankt voor de moeite.

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:13

Dido

heforshe

1 hangt volgens je eigen informatie direct aan 3, aangezien je dezelfde key gebruikt ;)

Welke informatie wil je nu precies opvragen?
code:
1
2
3
4
SELECT t2.subid, t2.controleid, t2.subtitel, MIN(t3.reactiesuurendag) as TIJD
FROM tabel2 t2 JOIN tabel3 t3 on t2.controleID=t3.subreactiescontroleID
GROUP BY t2.subid, t2.controleid, t2.subtitel
ORDER BY TIJD;

Zou je een eind in de goede richting kunnen helpen, maar ik maak hier wel bepaalde aannames betreffende wat je wilt en voorla betreffende je datamodel (dat rammelt echt aan alle kanten als je dezelfde key voor je drie tabellen gebruikt ;) )

Wat betekent mijn avatar?


Verwijderd

Topicstarter
mja bedankt voor de moeite maar ik denk dat je mijn ding niet volledig volgt.

Ixi en noork volgens mij wel :)

ma toch bedankt :)

ik zal het eens testen

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:13

Dido

heforshe

Verwijderd schreef op 28 februari 2004 @ 13:53:
mja bedankt voor de moeite maar ik denk dat je mijn ding niet volledig volgt.
Je maakt me heel nieuwsgierig :)
Verwijderd schreef op 28 februari 2004 @ 13:35:
forumId naar controleId
controleId naar subControlereactiesId
Dit is geen correcte manier om een 1-to-many relatie te leggen tussen tabel 1 en tabel 2, en tussen tabel 2 en tabel 3.

Zolang je je datamodel niet juist opzet kun je correcte sql vergeten :)

Als je wel degelijk een 1-many hebt tussen 1 en 2, en 2 en 3, dan kom je met mijn query een heel end.

Als je andere relaties er tussen hebt liggen ben ik ontzettend benieuwd wat je dan wel van plan bent.

Wat betekent mijn avatar?


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 27-05 06:16

Freee!!

Trotse papa van Toon en Len!

* Freee!! begint ondertussen toch ook wel heel nieuwsgierig te worden. Ik weet dat dit zo ongeveer dagelijks werk is voor Dido (en voor mij) en als je het hem niet duidelijk uit kunt leggen (en ik er ook niks meer van snap), ben ik bang dat jij op een slordige manier aan het fröbelen bent.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Verwijderd

Topicstarter
foutje bij tabel 2

is het opnieuw de unieke nummering

het is dus subId naar subcontroleId

sorry :)

  • Noork
  • Registratie: Juni 2001
  • Niet online
Volgens mij zijn de relaties wel juist. Maar je kunt Dido en mij even uit het duister brengen en post even je SQL statements voor het creeren van de tabellen. En een plaatje zegt meer dan duizend woorden, dus een schema van je tabellen met de relaties zou ook handig zijn.

Verwijderd

Topicstarter
hiermede de relaties

Afbeeldingslocatie: http://ww3.avmotion.be/users/andy/db.gif

nu vraag ik me ook af of limit wel een geldige functie is. in mysql werkt dit maar in gewone sql niet. Is er daar iets anders voor?

[ Voor 48% gewijzigd door Verwijderd op 28-02-2004 14:16 ]


  • Noork
  • Registratie: Juni 2001
  • Niet online
Oke prima dus, eerder gegeven query moet ongeveer werken.

Verwijderd

Topicstarter
limit werkt enkel in MySQL

kennen jullie daar een andere functie voor, of kan ik dit gewoon laten aflopen infeite in een do while lus?

  • Noork
  • Registratie: Juni 2001
  • Niet online
SELECT TOP 10

[ Voor 12% gewijzigd door Noork op 28-02-2004 14:19 ]


Verwijderd

Topicstarter
thx, wat zou ik toch doen zonder deze site hé :)
aja en zonder jullie :) :p

  • Noork
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op 28 februari 2004 @ 14:20:
thx, wat zou ik toch doen zonder deze site hé :)
aja en zonder jullie :) :p
zoeken met google en code van hotscripts bekijken ;)

Verwijderd

Topicstarter
Note: The following example works with ORACLE and Microsoft SQL server but not with Microsoft Access.

The keyword DISTINCT and COUNT can be used together to count the number of distinct results.

Syntax
SELECT COUNT(DISTINCT column(s)) FROM table


dit wil dus zeggen :( dat

select * from tabel2 where subid = (SELECT DISTINCT -topic-id- FROM reacties TOP 10 ORDER BY datum ASC)

niet zal werken :( plus top is spijtig genoeg ook geen geldend ding.
mja, het zal dus niet meer zo simpel gaan waarschijnlijk :(

Verwijderd

Verwijderd schreef op 28 februari 2004 @ 14:52:

select * from tabel2 where subid = (SELECT DISTINCT -topic-id- FROM reacties TOP 10 ORDER BY datum ASC)

niet zal werken :( plus top is spijtig genoeg ook geen geldend ding.
mja, het zal dus niet meer zo simpel gaan waarschijnlijk :(
Oh, jawel hoor... alleen net iets anders:
code:
1
2
select TOP 10  * from tabel2 where subid IN 
       (SELECT DISTINCT -topic-id- FROM reacties ORDER BY datum ASC)


Maar.. dit gaat toch nog niet helemaal 't gewenste resultaat geven (volgorde van de topics is niet gesorteerd)... De juiste oplossing is toch die van Dido (zie zijn 3e reactie)

[ Voor 17% gewijzigd door Verwijderd op 28-02-2004 15:29 ]


Verwijderd

Topicstarter
mja, maar distinct werkt niet op ms access db's.

plus "TOP" wordt ook niet geldig verklaard door ms access db's :( microsoft tssssss, altijd in hun eigen voordeel maken é ;)

Verwijderd

Verwijderd schreef op 28 februari 2004 @ 15:23:
mja, maar distinct werkt niet op ms access db's.

plus "TOP" wordt ook niet geldig verklaard door ms access db's :( microsoft tssssss, altijd in hun eigen voordeel maken é ;)
Hm, zowel DISTINCT als TOP werken wel voor Access DB's... Je moet ze alleen op de goede manier gebruiken :D

Verwijderd

Topicstarter
http://www.w3schools.com/sql/sql_tryit.asp

kun je dat dan es proberen op deze test pagina aub?

kgeloof u wel zenne. Maar misschien kun je je vergissen.

sorry idd, je hebt gelijk : het werkt wel

[ Voor 13% gewijzigd door Verwijderd op 28-02-2004 15:46 ]

Pagina: 1