Datenbank - Abfrage und Auslesen
So, leider bin ich nicht mehr so fit in datenbanken nach mehreren Jahren kompletter Pause :(
Ich habe folgendes "Problem": Ich habe 2 Datenbanken, in der einen sind Sonnensysteme mit ein paar Daten, die löese ich aus mit PHP-Code:
PHP-Code:
Die zweite Datenbank mit Sonnen. Jede Sonne hat eine eigene sun_id und eine system_id, da es Systeme mit mehreren Sonnen gibt. Die Option, jedesmal auf die Datenbank zuzugreifen und die Sonnen pro System auslesen, ist einfach, aber bei 32k Systemen dauert das ewig. (und das werden evtl später bis zu 1M Systeme oder mehr...) Also wollte ich die Sonnen auslegen, wie die Systeme, auch kein Problem. PHP-Code:
Muss ich dann noch eine weitere While-schleife machen dafür, die dann Pro System alle Sonnen durchsucht? Momentan sind für mich (nach meinen Kenntnissen) folgende Optionen möglich: 1. Pro System ein DB-Zugriff für Sonnen (klappt, dauert aber zu lange) 2. Pro System eine While-schleife, die alle Sonnen absucht (dauert acuh echt lange, sind ja mehr Sonnen, als Systeme...) 3. VOR der While-Schleife die Daten auswerten und in Variablen speichern als Array (das wäre dann quasi $SunData[$SystemID]=(daten, diew gebraucht werden) 4. Bei ERstellung der Sonnen die Daten auswerten und einen neuen Eintrag in die System-Datenbank machen (was vermutlich das einfachste wäre). 5. Ich hoffte, daß es eine Option gibt, aus der $SunData geziehiehl mit der System-ID die Datten entnehmen zu können (das wäre das einfachste). Genau HIER brauche ich hilfe, geht das? ...DX |
AW: Datenbank - Abfrage und Auslesen
Hallo Lutz,
hast Du zwei Datenbanken oder "nur" zwei Tabellen in einer Datenbank? Wie sind die beiden Tabellen (davon gehen wir jetzt mal aus) miteinander verknüpft? Welche Indizies gibt es? Kannst Du bitte zum besseren Verständnis die Struktur der beiden Tabellen hier posten? |
AW: Datenbank - Abfrage und Auslesen
Also, eine Datenbank, 2 Tabellen.
Die sind nicht miteinander verknüpft und haben keine Indizes (ich muss gestehen, ich weiß nicht, was das macht, Indizes, daher habe ich die nie benutzt) Tabellenstruktur: Datenbank: GX Tabelle 1: SonnenSysteme Tabelle 2: Sonnen Tabelle 3: Planeten Tabelle 4: Atmosphaeren Tabelle 5: Kontinente etc. Bei der Stuktur ise folgendes System: Jedes hat immer eine einzigartige "ID" SystemID bei SonnenSysteme SonnenID bei Sonnen PlanetenID bei Planeten etc In der Datenbank Sonnen hat jede Sonne noch ein "SystemID", damit man weiß, in welchem System die Sonne ist. Bei Planeten ist eine "SystemID", damit man weiß, in welchem Sonnensystem der Planet ist Ich lese nun also erstmal die ganze Tabelle "SonnenSysteme" ein. Dann mit einer "While-schleife für jede SystemID sollen dann Planeten erstellt werden. Allerdings brauche ich dafür auch Daten von der/denn Sonn/Sonnen aus der "Sonnen"-Datenbank. Die kann ich einlesen mit "WHERE SystemID='$s[2]'" ($s[2] ist aus der While-schleife die System-ID, damit der nur die Sonnen nimmt, die in dem System sind). Wie kann ich allerdings nun auf die Daten der Sonnen zugreifen, die ich ausgelesen habe? Da stehe ich irgendwie auf dem Schlauch... Bei Systemen brauche ich halt mehreere Einträge und von allen Sonnen des System,s auch welche, damit ich die Planeten korrekt berechnen kann (mit Geschwindigkeit, Masse, Anziehungskraft etc) ...DX |
AW: Datenbank - Abfrage und Auslesen
Wolltest Du nicht noch die Struktur der beiden Tabellen aus Deiner Datenbank posten?
Um bei Performancefragen richtig helfen zu können, bedarf es folgender Informationen (für alle beteiligten Tabellen): * SHOW CREATE TABLE tbl; -- liefert engine, indexes * EXPLAIN UPDATE/SELECT ...; -- EXPLAIN Ausgabe für den Zugriffpfad |
AW: Datenbank - Abfrage und Auslesen
Code:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; |
AW: Datenbank - Abfrage und Auslesen
Ok, weiter geht es.
Zum Verständnis bitte noch: Führend ist die Tabelle Sonnensysteme. In den einzelnen Sonnensystemen gibt es n Sonnen (1:n) - richtig? Das gleiche gilt für die Planeten (1:n Beziehung zu Sonnensystemen) - richtig? Wenn richtig, warum sind dann Sonnen und Planeten in unterschiedlichen Tabellen? |
AW: Datenbank - Abfrage und Auslesen
Planeten und Sonnen haben unterschiedliche Daten.
Sonnen haben halt ihre Leuchtkraft, Spektralklasse und Planeten( darunter falen auch Gasriesen, Asteroidengfelder und Kleinstplaneten aus Eis oder Felsen oder selten auch mal wertvollen Rohstoffen) sind halt besiedelbar und daher eine eigene Tabelle. Sonnen brauche ich nur, wenn man das System anzeigt (oder die Galaxie), Planeten brauche ich, wenn ich dort "genauer" erkunde oder baue etc. Die Idee, beides in "eine" Tabelle zu packen, ist interessant, da es "technisch" ja "wenig" Unterschied macht, das stimmt. Allerdings sehe ich die "Sonnen" (die dan Großteil der Masse eines systems ausmachen) als wichtig genug, denen eine eigene Tabelle zu geben ;) Alle anderen "Planetoiden" (auch Monde und Mini-Sonnen) sind dann in Planeten - werden entsprechend 10x soviel sein, wie Systeme ;) Später werden noch folgende Tabellen hinzukommen (mindestens):
Es wird vermutlich noch weitere Tabellen geben, wenn ich soweit bin, aber das wird vermutlich mindestens sein, ich bin ja eh noch am Anfang... Für mich ist jedoich wichtig, daß es möglichst "realistisch" ist also nicht nur 20 Gebäude pro Planet oder sowas komisches ;) Um ein paar "Unrealistische" Dteails komme ich eh nicht herum:
.oO(Das liest sich fast, wie eine Werbung...) Naja, bin halt noch weit am Anfang, meine Verteilung der Sonnensystem ist gut, aber noch nciht das, weas ich genau möchte .- wird aber später erst "optimiert". Zuerst muss es laufen, die Verteilung der Sonnensysteme und Planeten wird pro Test eh neu erstellt und die Funktion, die die Spiralarme des Sonnensystems berechnet, ist momentan kompliziert genug. Hätte gerne ein Bild eingefügt, macht das Forum aber ja leider nicht) Was meine "Kernfrage" betrifft, habe ich die "umgangen" *hüstel* Ich erstelle die Planeten nun, indem ich die SystemMasse als Ausgangspunkt nehe ;) ...DX |
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:20:12 Uhr. |
Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.