Results 1 to 9 of 9

Thread: SQL vraag; een SELECT met natuurlijke volgorde

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747

    SQL vraag; een SELECT met natuurlijke volgorde

    Een klein simpel vraagje, waar ik toch niet uitkom.
    Ik heb een tabel waarin een veldnaam, veldtype en veldlengte in staat.
    Deze gegevens worden gebruikt om een virtualtable te creeeren waarin records komen te staan van de gevonden gegevens. Dit tabel krijgt daardoor een vorm van een matrix, die ik in mijn report writer gebruik.
    Maar als ik een SELECT uitvoer, komen mijn veldnamen op alfabetische volgorde.
    Dat heeft als nadeel dat ik geen gebruik kan maken van appendrecord() en zal dus de velden één voor één moeten vullen.
    Is er een manier om toch de volgorde op natuurlijke manier te tonen. Eerst dacht ik dat het te maken had met de primairy key, maar het resultaat blijft hetzelfde.

    Ik maak gebruik van MySQL database.
    Delphi is great. Lazarus is more powerfull

  2. #2
    Senior Member Mark-io's Avatar
    Join Date
    Apr 2006
    Location
    midden vh land
    Posts
    254
    waarschijnlijk is "veldnaam" de primary key van die 1ste tabel met veld-definities; als je dan een gewone SELECT uitvoert komen ze er netjes op alfabet uit. je zou die key kunnen droppen als je m niet echt nodig hebt
    Actually, there is something more dangerous than a little knowledge: a lot of ignorance.

  3. #3
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Dat zou je inderdaad verwachten. Ik heb ook de primary key verwijderd, Maar het resultaat bleef hetzelfde. Ik vraag mij af of dit ook op andere databases gebeurt.
    Delphi is great. Lazarus is more powerfull

  4. #4
    Registered User
    Join Date
    Feb 2006
    Location
    Oss
    Posts
    17
    In de help van Sybase SQL Anywhere wordt expliciet gezegd dat je zonder gebruik van een ORDER BY een willekeurige volgorde terug kunt krijgen.
    Wat ik regelmatig zie is dat zonder ORDER BY, de resultaten in de volgorde van invoer worden gegeven. Wanneer er echter behoorlijk is gemuteerd op de tabel (deletes en inserts) gaat dat ook niet meer op.
    Vaak is het ook nog zo dat wanneer er een WHERE is opgegeven de SQL-optimizer besluit om daarvoor een index te gebruiken, en dan zie je dus weer dat de volgorde op basis van die index is.

    Kortom het is erg afhankelijk van de SQL-optimizer die gebruikt wordt. En wil je zekerheid hebben over de volgorde van de velden die je terugkrijgt, dan zou je in je tabel iets van een "veldvolgorde" kolom toe moeten voegen om daarop te sorteren.

  5. #5
    Wat mensen vaak vergeten, is dat het resultaat van een select een ongeordende set is. Alleen als je die expliciet sorteert, dus met een ORDER BY, kan je zeker zijn van de volgorde.
    Ignorance killed the cat. Curiosity was framed.

  6. #6
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Quote Originally Posted by SQB View Post
    Wat mensen vaak vergeten, is dat het resultaat van een select een ongeordende set is. Alleen als je die expliciet sorteert, dus met een ORDER BY, kan je zeker zijn van de volgorde.
    Dat dacht ik dus ook en zeker bij deze tabel zou er niet gesorteerd moeten worden, maar het gebeurt wel. Een workaround zou zijn een extra integer veld met daarin een oplopende waarde. Dan daar op een primary key zetten. Maar dat wil ik juist vermelden. Ik verwacht gewoon een chonologische volgorde van invoer. Bij deze tabel is er alleen een invoer voor de eerste keer. Daarna zal er telkens een select plaatsvinden.

    Wat ik nog wel ben vergeten te zeggen is dat er vier velden zijn; n.l. progrid, veldnaam, veldtype en veldlengte. Maar deze wordt teniet gedaan op het moment dat er een WHERE clausule wordt meegegeven. Dan zijn alleen nog de laatste drie van toepassing.
    Delphi is great. Lazarus is more powerfull

  7. #7

    Ongeordend is ook echt ongeordend.

    Quote Originally Posted by jkuiper View Post
    Dat dacht ik dus ook en zeker bij deze tabel zou er niet gesorteerd moeten worden, maar het gebeurt wel. (...) Ik verwacht gewoon een chonologische volgorde van invoer.
    Met ongeordend bedoel ik ook echt ongeordend; je kan dus van geen enkele volgorde uit gaan, ook niet die van invoer. Alleen als je expliciet sorteert weet je zeker dat je records een bepaalde volgorde hebben. Als je wil sorteren op tijdstip van invoer, kan je een datetime veld aanmaken met als default waarde now() of de MySQL equivalent daarvan en dan daarop sorteren.
    Ignorance killed the cat. Curiosity was framed.

  8. #8
    • Verplaatst van Algemeen naar Databases.
    1+1=b

  9. #9
    Senior Member Thaddy's Avatar
    Join Date
    Dec 2004
    Location
    Amsterdam
    Posts
    2,211
    Dat kan ik uit en nadrukkelijk bevestigen: ongeordend is ongeordend.
    Werken aan Ansi support voor Windows is verspilde tijd, behalve voor historici.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •