AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Rang eines Felds in Tabelle bestimmen
Thema durchsuchen
Ansicht
Themen-Optionen

Rang eines Felds in Tabelle bestimmen

Ein Thema von Alloc · begonnen am 19. Jun 2007 · letzter Beitrag vom 27. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#1

Rang eines Felds in Tabelle bestimmen

  Alt 19. Jun 2007, 20:52
Datenbank: MS Access • Version: 2000+ • Zugriff über: SQL
Hi alle,

mein Vater hat mich gebeten herauszufinden, ob und, wenn es denn geht, wie man aus einer Tabelle zu einem Feld in jeder Zeile dessen Rang herausbekommen kann. Also quasi das man die Reihenfolge der Integerwerte in der Tabelle erhält.

Bsp:
Code:
id | Name | zahl
 0 | AB  | 4
 1 | CD  | 7
 2 | BLA | 2
 3 | BLUBB| 1
 4 | XYZ | 5
Dabei sollte dann bei einem entsprechenden Request bei den Zeilen als zusätzliches Element dabeistehen (in Reihenfolge der IDs): 3, 5, 2, 1, 4.

Hoffe es ist verständlich geworden, was ich suche

Wäre für jeden Hinweis dankbar, in der MySQL-Doc habe ich aber schonmal nichts gefunden was mir weitergeholfen hätte.

Grüße,
Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
176 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Rang eines Felds in Tabelle bestimmen

  Alt 19. Jun 2007, 21:05
Hmmm ich bin nicht sicher was du unter Rang meinst, vielleicht auch zu müde
Versuchs einfach noch einmal...
Gruss Gremlin
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Rang eines Felds in Tabelle bestimmen

  Alt 20. Jun 2007, 06:46
Wenn du die Reihenfolge nicht verändern willst ist das nicht so leicht. Am einfachsten wäre es ja die Tabelle sortieren zu lassen.
Sonst müsstest du einen Subselect auf die sortierte Tabelle und Limiterung auf die Position in der unsortierten Tabelle machen.
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Rang eines Felds in Tabelle bestimmen

  Alt 20. Jun 2007, 08:20
Hallo Chris,

ein theta-join könnte dir helfen:

SQL-Code:
SELECT l.id, l.name, l.zahl, count(*) AS Rang
FROM personen l LEFT JOIN personen r ON l.zahl >= r.zahl
GROUP BY l.id, l.name, l.zahl
ORDER BY l.id
Grüße vom marabu
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Rang eines Felds in Tabelle bestimmen

  Alt 20. Jun 2007, 09:11
Hi,

danke erstmal allen für die Antworten =)

@Gremlin: Stell dir als einfacheres Beispiel eine Tabelle vor, in der eine Spalte die Zeiten bei einem Wettrennen enthält. Nun will ich mit einem Select quasi direkt den von der Zeit abhängigen Rang erhalten.

@marabu: Habe deinen SQL-Schnipsel mal ausprobiert, das gibt mir total komische Zahlen zurück die auch nicht eindeutig sind (und sogar größer als die Zeilenzahl in meiner Tabelle werden).

@mkinzler: Das mit dem Subquery klingt gut ... im Prinzip müsste ich doch also nur ein Subquery haben, welches nach der Zahlenspalte sortiert und jeder Zeile dann eine fortlaufende Zahl übergibt? Wenn ja wäre vor allem das Problem, wie ich eine fortlaufende Zahl ausgeben lasse
Abgesehen davon habe ich noch nicht mit Subqueries gearbeitet, aber das dürfte ich mit der Docu hinbekommen =)

Grüße,
Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Rang eines Felds in Tabelle bestimmen

  Alt 20. Jun 2007, 11:43
Hallo Chris,

ich habe den von mir vorgeschlagenen theta join in Access 2003 mit den angegebenen Beispieldaten getestet und bin mit dem Ergebnis zufrieden. Gibt es vielleicht noch andere Testdaten, mit denen auch ich einmal die "total komischen Zahlen" produzieren könnte? Ich hatte heute noch nichts zu lachen ...

Freundliche Grüße
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Rang eines Felds in Tabelle bestimmen

  Alt 20. Jun 2007, 13:01
Hm, ok, ich hätte das dann vllt auch mit der entsprechenden Engine testen sollen
Mit MySQL 4.1 geht das jedenfalls nicht
Aber ich werd das mal bei meinem Vater mit Access testen wenn der wieder da ist.

Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Rang eines Felds in Tabelle bestimmen

  Alt 20. Jun 2007, 13:11
In MSSQL kann man das so lösen:
1. Deklariere eine temporäre Tabelle mit allen Feldern der Quelltabelle + zusätzlich ein Autoinc (Identity)-Feld (=ID)
2. Kopiere die Daten in die temporäre Tabelle (mit einer beliebigen ORdnung), dabei wird der Rank (ID) automatisch generiert
3. Gib die temp-Tabelle aus und schmeiss sie auf den Müll.

Die Spalte ID spiegelt ja eine totale Ordnung wieder. Also muss man irgendeine Ordnung (Sortierung) angeben, Wenn das z.B. das das 'Zahl'-Feld wäre, könnte man auch sowas schreiben

SQL-Code:
select *,
       (select count (*) From Tabelle alias Y where Y.Zahl < X.Zahl) as Rank
From Tabelle alias X
In der Spalte 'Rank' steht also die Anzahl der Datensätze, deren Feld 'Zahl' kleiner ist.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Rang eines Felds in Tabelle bestimmen

  Alt 27. Jun 2007, 14:23
Hi,

@marabu: Hab das mit Access mal getestet und das funktioniert =)

@alzaimar: Danke, sowas in der Art hatte ich mir fast gedacht, nur halt wie man so einen SubQuery aufbaut ... Bei dir ist allerdings ein kleiner Fehler drin (nehm an ausm Gedächtnis abgetippt ): statt "alias" muss es "as" heißen.
Ansonsten besteht bei der Variante natürlich das Problem, dass man eindeutige Werte haben sollte, da sonst ein Rang doppelt vorkommen kann (was natürlich andererseits uU auch wieder Sinn macht). Und man sollte zu dem SubQuery 1 addieren, sonst fängt er bei 0 an mit dem Rang.

Grüße,
Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Rang eines Felds in Tabelle bestimmen

  Alt 27. Jun 2007, 15:35
Hi,

ich hätte die Variante mit dem der temp-Tabelle genommen... ist viel schneller (insbesondere bei sehr großen tabellen). Un der Rest: Na ja, ich verwende nie 'alias' oder 'as'. immer nur 'select * from Tabelle t'
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz