German Content richtig aus Datenbank laden

Alexander Stolte

Expert
Licensed User
Longtime User
Also wie ich das verstanden habe, mache ich jetzt eine weitere Spalte namens "ID" und gebe ihm die Eigenschaft "PrimaryKey" richtig oder?

Ich habe bereits eine spalte namens "Post_ID" dies ist eine unique id, die besteht aber aus Buchstaben und Zahlen, diese benötige ich aber um dann intern ein paar Algorithmen ausführen zu können.
 

pucki

Active Member
Licensed User
Genau richtig.

Folgende Eigenschaften

PrimaryKey <- Primär-Schlüssel
UNIQUE <- Einmalig
NOTNULL <- Kein Nullwert erlaubt
AUTOINCREMNET <- Zähle automatisch hoch wenn neuer Satz angelegt wird

Entweder integer (reicht bei meiner Datenbank mit 3 Mio Datensätzen aus ;) ) oder Double angeben wenn erlaubt.

Nach der Anlage wird das Feld automatisch gefüttert von SQL-System.

Und schon ist ein SICHERER Pointer erstellt mit den man im Prg. arbeiten kann.

Betrachte dieses Feld als NUR LESEN FELD. Und lass die Finger davon, was heißt NIEMALS ÄNDERN. !!!! Das führt zu bösen Fehlern. Es ist aber perfekt für Abfragen und zum identifizieren des Datensatzes.

Kleiner Hinweis am Rande : Bei einige Systeme wie z.B. Access sind Probleme vorprogrammiert wenn ein solches Feld nicht existiert.

Ach und auch wichtig. Du brauchst dich um das Feld NICHT KÜMMERN. Wenn du z.b. ein
INSERT ..... Befehl gibst, dieses Feld NICHT mit angeben. !!! Die AUTOINCREMNET Anweisung in der Datenbank füttert es automatisch. !!!!


Selbstverständlich kannst du mehrere Felder mit ähnlichen Eigenschaften haben (wie dein Post_id). Aber mehr als ein Feld mit der Funktion AUTOINCREMNET (geht nur mit natürlichen Festzahlen) ist Schwachsinn.

Gruß

Pucki
 
Last edited:

Alexander Stolte

Expert
Licensed User
Longtime User
Also wenn ich 3 Millionen Datensätze erreicht habe, dann gebe ich einen aus :)

Hab die Spalte nun hinzugefügt.

Where ID > alte_ID and zeitstempel > xx.xx.xxxx <- Abfrage schnipsel.

Mir ist gerade aufgefallen, die id ist ja dann fest vergeben, also wenn ich jetzt mir auswerten lassen will, gebe mir die punkte nach der Größe her aus und der Datensatz mit der ID 5 (punkte=10) steht ganz oben und die id mit der 2 (punkte=5) steht darunter, dann bringt mir das ja nichts, wenn ich jetzt mir weitere Daten ausgeben lassen will geordnet wie oben, nur das ich die id 5 und 2 schon in meiner Liste geladen habe und id 3 hat punkte=3 und muss dann unter die 2 geladen werden ohne das ich id 5 und 2 nochmal downloaden muss. Darum ging es mir.
 

pucki

Active Member
Licensed User
Mach einfach eine doppelte ORDER Anweisung.

ORDER by zeitstempel , ID

Der Order Befehl kann man mit "sortiere nach" übersetzen. Die Felder danach geben die Reihenfolge an, es wird erst nach den erste Feld sortiert, und wenn die gleich sind, nach den 2 Feld. Da das ID Feld immer aufsteigend ist, hast du so die Reihenfolge der Einträge wie sie in die Datenbank geschrieben wurden.

Durch die WHERE ID > alte_id Anweisung hast du die Sicherheit das keine "alten" Datensätze der vorherigen Anfrage gelesen werden.

Das führt dazu das der Zeitstempel vor Rang hat, und bei gleichen Zeitstempel die neusten als letztes kommen. ;)


Tröste dich. Datenbanken richtig abzufragen ist eine Kunst, die man mühevoll lernen muss ;) Und auch der Aufbau einer Datenbank ist eine Kunst. Da hab ich schon Bücher drüber in der Bücherei gesehen. ;)

Die 3 Mio. Datensätze sind eine Ausnahme. Sie sind das Ergebnis einer Datensammlung aus den Netz deren Ausbau so schrottig ist, das ich daraus NUR FÜR MICH eine Datenbank gemacht habe. Aber 100.000 - 250.000 Datensätze sind schon fast Standard für mich. Sind meistens Artikel-Datensätze die mein Freund von Firmen in allen möglichen Varianten bekomme und die ich in ein "Norm-Format" bringe, was die Software eine Freundes lesen kann.

Daten-Konvertierung mache ich schon seit fast 30 Jahren. ;)

Gruß

Pucki
 
Last edited:

Alexander Stolte

Expert
Licensed User
Longtime User
Danke, werde ich mich morgen direkt ransetzen und es umsetzen. :)

Hab jetzt schon mehr von dir gelernt, als von google :rolleyes:

Ich habe recht oft mit Datenbanken zutun in meiner Ausbildung zum FI Systemintegration, aber dort brauch ich meistens nur einfache abfragen zu bauen. Aber wie gesagt, man lernt jeden Tag dazu.

Danke für deine Zeit.
 

pucki

Active Member
Licensed User
Och es gibt schon gute SQL-Seiten. z.B. diese hier. http://datenbanken-verstehen.de/sql-tutorial/ oder lies einfach mal diesen Artikel ;) http://t3n.de/news/sql-tutorials-594945/ der der dir helfen das richtige Lernsystem zu finden.

Gib einfach SQL LERNEN ein, Seiten auf Deutsch.

Die Seiten sind zwar in der Regel etwas älter, aber das ist egal. Die Befehle sind gleich, die Logik ist gleich, und bei neuen Updates von SQL kommen nur hin + wieder mal ein "besondere" Erweiterung dazu. Teilweise sind diese Erweiterungen dann Dialekt bezogen, und werden möglicherweise mal in ein anderen Dialekt übernommen.

Und nicht vergessen, es ist noch kein Meister vom Himmel gefallen. Ich selbst habe nie eine Ausbildung in der EDV gehabt. Aber ich Code seit fast 30 Jahren. Angefangen auf einen ZX-81 mit ein Kilobyte RAM und einer Musikkassette als "Festplatte" ;) Das bekommt man in der Zeit einiges an Übung. Und TROTZDEM muss ich hier, bei Android und Arduino wieder einiges neu lernen.

Ich sag immer. Eine Ausbildung in der EDV mag ganz nützlich sein. Aber 1/2 Jahr nach der Ausbildung kannst du 30 % vergessen und 2 Jahre danach kannst du nur noch 20 % nämlich die Grundlagen nutzen. Liegt nicht an der Ausbildung selbst, sondern an der schnellen Entwicklung in der Branche. Einfaches Beispiel. Ich ärgere mich bei Windows dauernd herum, weil die Funktionen die ich seit 15 Jahren nutze, wo anders versteckt haben. Und das ist noch ein harmlosen Beispiel ;)

Was ich damit sagen will. Gewöhne dich dran, oder such dir ein anderen Job ;) Ich persönlich finde es immer noch spannend was neues aus zu knobeln ;)


Gruß

Pucki
 
Top