AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Vom zwei-dimensionalen ins ein-dimensionale...
Thema durchsuchen
Ansicht
Themen-Optionen

Vom zwei-dimensionalen ins ein-dimensionale...

Ein Thema von Mithrandir · begonnen am 23. Mai 2009 · letzter Beitrag vom 23. Mai 2009
Antwort Antwort
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#1

Vom zwei-dimensionalen ins ein-dimensionale...

  Alt 23. Mai 2009, 13:40
Hi ihr,

so lange Firebird noch keine zwei-dimensionalen Indizes unterstützt (ist das überhaupt geplant?), muss ich zwei-dimensionale Werte in einen ein-dimensionalen Wert umwandeln. Nur wie erledigt man das am Besten, wenn man folgende Rahmenbedingungen hat:
  • Das Koordinatensystem hat als höchsten Wert (39136/39136), keine Nachkommastellen und keine negativen Werte
  • Es sollten von...bis Abfragen möglich sein. ("Gib mir alles von (3/4) bis (4/5)*")

Meine Idee wäre gewesen, einen ausreichend großen Datentyp (wohl Integer in diesem Falle) zu nehmen, und die X-Koordinaten z.B. in den oberen 2 Byte zu speichern und die Y-Koordinaten in den unteren 2 Byte.

Allerdings funktioniert dann Punkt 2 nicht mehr.

Hat jemand eine andere Idee?

*Die X und Y Werte sind mit anderen Eigenschaften verknüpft. Daher ist so eine Abfrage möglich. So stehen X und Y eigentlich nicht für Punkte, sondern für einen Bereich mit einer Größe von 512*512 Punkten.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Vom zwei-dimensionalen ins ein-dimensionale...

  Alt 23. Mai 2009, 13:43
Reichen zwei eindimensionale Indizes denn nicht? Wenn Firebird nicht völlig auf Sand gebaut ist, werden die auch benuzt, wenn du ein Query absetzt, das die Indizes als Kandidaten hat.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Vom zwei-dimensionalen ins ein-dimensionale...

  Alt 23. Mai 2009, 13:50
Was verstehst du unter einem 2 dimensionalem Index?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#4

Re: Vom zwei-dimensionalen ins ein-dimensionale...

  Alt 23. Mai 2009, 14:06
Ok, mag ja sein, dass ich das falsch verstehe, aber wenn ich einen Index anlege, dann kann ich mit dem doch recht flink auf eine bestimmte Zeile zugreifen. Allerdings muss ein Index doch immer eindeutig sein, oder? Es gibt ja (1/1), (1/2), (1/3)... Der X-Wert also immer derselbe...

@mkinzler: Naja, ein Index aus X- und Y-Werten.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Vom zwei-dimensionalen ins ein-dimensionale...

  Alt 23. Mai 2009, 14:11
Mit folgender Struktur

Code:
ID   X   Y   Wert
--------------------
1     1    1    2
2     1    2    1
3     1    3    3
4     2    1    1
...
Und einem Index über X und Y sollte das Problem doch händelbar sein?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#6

Re: Vom zwei-dimensionalen ins ein-dimensionale...

  Alt 23. Mai 2009, 14:33


Code:
ID   X   Y   Wert
--------------------
1     1    1    2
2     1    2    1
3     1    3    3
4     1    4    1
5     2    1    3
6     2    2    4
7     2    3    2
8     2    4    3
9     3    1    3
10    3    2    4
11    3    3    1
12    3    4    8
Wenn ich jetzt ne SQL Abfrage erstelle, um bspw. die zugehörigen Werte von (1/2) bis (3/4) zu ermitteln, dann bekomme ich als Rückgabemenge doch alle Werte mit den IDs von 2 bis 12. Das sind aber zuviele, denn die Werte mit der ID 5 und 9 gehören ja nicht zu der Rückgabemenge, da sie außerhalb des gewählten Rechtecks liegen.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Vom zwei-dimensionalen ins ein-dimensionale...

  Alt 23. Mai 2009, 14:50
Select Wert from tabelle where x between 1 and 3 and y between 2 and 4;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#8

Re: Vom zwei-dimensionalen ins ein-dimensionale...

  Alt 23. Mai 2009, 14:54
Hmm, so könnte man das natürlich auch machen...

//Edit: Danke
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

Re: Vom zwei-dimensionalen ins ein-dimensionale...

  Alt 23. Mai 2009, 15:31
Zitat von Daniel G:
Allerdings muss ein Index doch immer eindeutig sein, oder?
Du wirfst da Indizierung und Constraints in einen Topf. Bei Primärschlüsseln werden natürlich beide Konzepte angewendet - Index und Unique-Constraint - aber im allgemeinen Fall kannst du auch eine konstante Spalte indizieren. Bringt nur nix, ausser Kosten
  Mit Zitat antworten Zitat
23. Mai 2009, 15:36
Dieses Thema wurde von "mkinzler" von "Programmieren allgemein" nach "Datenbanken" verschoben.
FireBird ist eine Datenbank
Antwort Antwort


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 06:31 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