Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

1

23.10.2011, 00:07

SQL Befehl: Einzigartige Werte selektieren

Ich habe da eine Tabelle die 'Wegpunkte' heißt.
In dieser Tabelle gibt es 2 wichtige Spalten. Diese sind 'id' und 'punkt'.
Logischerweise liegt auf 'id' und auf 'punkt' ein "Primärschlüssel". Also so das man z.B. 'id' = 1 und 'punkt' = 1 nur einmal haben kann.

Also das sieht nun so ähnlich aus:
id punkt
1 1
1 2
1 3
5 1
5 2
5 3
5 4

Nun möchte ich das man 'id' aus der Tabelle ausliest.
Ich hab bisher folgendes versucht:

Quellcode

1
SELECT id FROM Wegpunkte;


Ausgabe:

Quellcode

1
2
3
4
5
6
7
1
1
1
5
5
5
5


Und ich möchte:

Quellcode

1
2
1
5


Nun könnte man folgendes machen:

Quellcode

1
SELECT id FROM Wegpunkte WHERE point = '1';

Das würde bei der oberen Tabelle funktionieren (als Notlösung). Nun könnte es aber vorkommen das Punkt 1 fehlt und dann funktioniert es wieder nicht.

Ich denke ich versteht nun was ich möchte und könnt mir da helfen.
Danke schonmal :>

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Teiby« (23.10.2011, 00:12)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

23.10.2011, 00:16

Quellcode

1
SELECT DISTINCT id FROM ...
oder aber

Quellcode

1
SELECT id FROM ... GROUP BY id
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

3

23.10.2011, 00:20

Quellcode

1
DISTINCT


Funktioniert! Vielen dank. Das wars schon :>

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

4

23.10.2011, 10:18

eine ID ist in der Regel dafür da, einen Datensatz eindeutig zu identifizieren
du hast in deinem Fall zur eindeutigen Identifizierung aber einen 2. Wert dazu geholt, weshalb ich vermute, dass das Datenbankdesign nicht optimal ist
wofür benötigst du die "id"s und punkte?
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

5

23.10.2011, 12:36

weshalb ich vermute, dass das Datenbankdesign nicht optimal ist


Zusammengesetzte Primärschlüssel sind jetzt nicht sooo ungewöhnlich.
Aber ja in diesem Fall scheint das Design noch nicht wirklich ausgereift zu sein.

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

6

23.10.2011, 14:35

Wie der Tabellenname schon sagt: Das sind Wegpunkte bzw. Wegpfade.

Die 'id' gibt die Pfadnummer an und 'point' den Wegpunkt zu dem Pfad. In der Spalte steht natürlich noch die XYZ Koordinaten. Aber das ist ja hier nicht relevant.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

7

23.10.2011, 14:41

Das schreit grad danach in mehrere tabellen aufegespalten zu werden ;)

Eine einzelne Tabelle für die Wegpunkte, in denen nur eine ID und die Koordinaten drin stehen. Dann eine Tabelle für die Pfade und dann noch eine Tabelle als verknüpfung zwischen den beiden.
Aus der Verknüpfungstabelle kannst du dann ohne weiteres auslesen, welche Punkte zu welchem Pfad gehören, bzw. in welchen Pfaden ein bestimmter Punkt enthalten ist.

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

8

23.10.2011, 14:55

3 Tabellen? Da verliert man doch schnell den überblick. Welche Vorteile soll den das haben?

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

9

23.10.2011, 14:57

http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

Den Überblick verlierst du nur, wenn du die Tabellen schlecht benennst.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

10

23.10.2011, 15:21

3 Tabellen? Da verliert man doch schnell den überblick. Welche Vorteile soll den das haben?

wenn man es zum 1. Mal hört, dann klingt es vielleicht noch so, allerdings sollte dir im Laufe der Zeit klar werden, welche Vorteile dies bringt

du solltest auch keine feld ID nennen, welches nicht zum Identifizieren des Datensatze dient
in dem Fall handelt es sich wohl eher um die ID des Pfades

point stellt in deinem Fall die ID eines Wegpunkts dar, oder? (eine Nummerierung kann das nicht sein, da sonst die 1 in jedem Fall da wäre)
zurzeit herrscht in deiner Tabelle eine Redundanz, da für jede ID jedes Mal zusätzlich die Koordinaten gespeichert werden
dies kann zu Inkonsitenzen führen, wenn du mal Wegpunkte an andere Positionen setzen musst, dabei aber nicht alle vorkommnisse aktualisierst
deshalb sollte für die Wegpunkte eine weitere Tabelle vorhanden sein

sofern du zu den Wegen noch weitere Informationen speichern willst, wie eine Bezeichnung oder ähnliches, dann hättest du, wenn du es wieder in die Tabelle unterbringst, wieder Redundanzen und die Gefahr von Inkonsistenzen
deshalb solltest du 3 Tabellen anlegen
1 Tabelle für Informationen über die einzelnen Wege (inklusive ID der Wege)
1 Tabelle für alle Wegpunkte (Koordinaten und ID der Wegpunkte)
und 1 Tabelle, in der du den Wegen die Wegpunkte zuweise (mit ID der Wege und ID der Wegpunkte, ggf. mit zusätzlicher Nummerierung der einzelnen Wegpunkte, damit klar ist, der wievielte Wegpunkt es von dem jeweiligen Weg ist, wobei es da auch wieder zu Inkonsistenzen kommen kann...)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige