SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 05.07.2020, 19:59:11
Benutzerbild von Darelius
Darelius Darelius ist offline
Anfänger
 
Registriert seit: Apr 2008
Ort: Lübeck
Alter: 50
Beiträge: 61
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:
$sysdata=mysqli_query($db_connect,"SELECT system_id, sys_suns_amount, sys_mass, sys_grav, sys_luminosity FROM system"); 
Dann soll er er Pro Sonnensystem seine Arbeit machen (Planeten erstellen etc) mit:
PHP-Code:
while ($s=mysqli_fetch_row($sysdata))
{
$sysID=$s[0];
$syssunamount=$s[1];

Soweit "kein" Problem, nun geht es los:
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:
$Sundata=mysqli_query($db_connect,"SELECT sun_id, system_id, sun_size, sun_distance FROM suns"); 
Aber, wie bekomme ich nun die exakten Daten in der While-Schleife aus der $Sundata"?

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
__________________
Darelius, Keeper of the Elements
Mit Zitat antworten
  #2  
Alt 06.07.2020, 17:39:26
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
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?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3  
Alt 07.07.2020, 19:34:38
Benutzerbild von Darelius
Darelius Darelius ist offline
Anfänger
 
Registriert seit: Apr 2008
Ort: Lübeck
Alter: 50
Beiträge: 61
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
__________________
Darelius, Keeper of the Elements
Mit Zitat antworten
  #4  
Alt 09.07.2020, 07:28:55
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
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
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #5  
Alt 09.07.2020, 16:39:17
Benutzerbild von Darelius
Darelius Darelius ist offline
Anfänger
 
Registriert seit: Apr 2008
Ort: Lübeck
Alter: 50
Beiträge: 61
AW: Datenbank - Abfrage und Auslesen

Code:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

CREATE DATABASE IF NOT EXISTS `gex` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `gex`;

CREATE TABLE `Sonnen` (
  `SonnenID` int(6) NOT NULL,
  `SystemID` int(6) NOT NULL,
  `GalaxieID` int(2) NOT NULL,
  `SonnenSpectralTyp` int(2) NOT NULL,
  `SonnenGroessenFaktor` float NOT NULL,
  `SonnenFarbe` varchar(21) COLLATE utf8_bin NOT NULL,
  `SonnenTemperatur` int(6) NOT NULL,
  `SonnenLeuchtkraft` float NOT NULL,
  `SonnenMasse` float NOT NULL,
  `SonnenDichte` float NOT NULL,
  `SonnenGroesse` float NOT NULL,
  `SonnenGravitation` float NOT NULL,
  `SonnenGeschwindigkeit` float NOT NULL,
  `SonnenAbstand` float NOT NULL,
  `SonnenRotation` int(6) NOT NULL,
  `SonnenWinkel` float NOT NULL,
  `SonnenEntdeckung` datetime NOT NULL,
  `SonnenEntdecker` int(6) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Sonnen';

CREATE TABLE `Systeme` (
  `SystemID` int(6) NOT NULL,
  `GalaxieID` int(2) NOT NULL,
  `SystemX` int(6) NOT NULL,
  `SystemY` int(6) NOT NULL,
  `SystemZ` int(6) NOT NULL,
  `SystemSonnenAnzahl` int(2) NOT NULL,
  `SystemMasse` float NOT NULL,
  `SystemGravitation` float NOT NULL,
  `SystemLeuchtkraft` float NOT NULL,
  `SystemSonnenFarbe` varchar(21) COLLATE utf8_bin NOT NULL,
  `SystemSonnenSpectralTyp` int(2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Systeme';


ALTER TABLE `Sonnen`
  ADD PRIMARY KEY (`SonnenID`),
  ADD KEY `SonnenID` (`SonnenID`);

ALTER TABLE `Systeme`
  ADD PRIMARY KEY (`SystemID`),
  ADD KEY `SystemID` (`SystemID`);
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Das wäre dann die Datenbank
__________________
Darelius, Keeper of the Elements
Mit Zitat antworten
  #6  
Alt 09.07.2020, 17:57:25
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
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?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #7  
Alt 10.07.2020, 13:10:32
Benutzerbild von Darelius
Darelius Darelius ist offline
Anfänger
 
Registriert seit: Apr 2008
Ort: Lübeck
Alter: 50
Beiträge: 61
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):
  • Atmosphären (dort sind die Atmosphärendaten pro Planet hinterlegt und die werden beeinflussbar (beim terraforming zvor allem)
  • Kontinente Besiedelbare Gebiete (auch Ozeane werden Kontinente sein, kann man ja (wenn die Technologie da ist) auch besiedeln ;)
  • Kolonien Name der Tabelle schwebt noch, das wird anzeigen, welche Gebiete wie besiedelt sind und von wem - wie die tabelle dann genau aufgebaut wird, muß ich dann gucken
  • Bautrupps - Bautrupps sind für den Bau und Umrüstung für Gebäude, werden (bermutlich) eine eigene Tabelle bekommen, wo ihre Beschreibung und "Werte" drin gelagert sind
  • Gebäude - Gebäude. welche gebaut sind, mit Werden, Zuordnung zu Kolonie etc
  • Rohstoffe - Aktuelle Rohstoffe pro Kolonie (evtl in Kolonie enthalten)
  • Bevoelkerung - Einwohnerdaten pro Kolonie (evtl in Kolonie enthalten)
  • Fahrzeuge - Schiffe und andere Fahrzeuge (mit Aufgabe, wie Angriff, ERkundung etc)
  • Flotten - Verbände von Fahrzeugen (siehe Fahrzeuge nur als Verband)
  • Forschung - Forschung - welcher Spieler welche Forschungen auf welchen stufen hat (das Forschungssystem ist kompliziert...)
  • Baupläne - Baupläne, da jedes Objekt individuell geplanet werden kann, hat jedes seinen "Plan", den man speichern und auch 2veröffentlichen" kann
  • Diplomatie - Kommunikation mit anderen Spielern / Status
  • Nachrichten - Log von Nachrichtenverläufen
  • Aufträge - Aktuelle Bauvorhaben
  • Anfuehrer - Daten des Anführers, den der Spieler verkörpert
  • Spieler - Logindaten des Benutzers etc
  • Erkundung - Informationen, wer was wie erkundet hat (man sieht und weiß halt nicht alles)

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:
  • Zeit - Zwar wird das im Spiel korrekt berechnet, aber wer will das Spiel schon in realer Echtzei spielen und jahrzehnte warten? Aktuell ist meine "Idee", einen Monat pro realer 24h zu machen oder sowas, das werden tess später zeigen ;)
  • Sonnensysteme ich werde keine 200.000.000.000 Sonnensysteme bauen, das würde den Rahmen und auch vermutlich jede Festplatte spengen, ich werde die ersten Tests mit unter 500 Systemen machen ,das Spiel vermutlich mit etwa 50k-150k Systemen in den ersten größeren testphasen... Sollten wirklich deutlich mehr Spieler da sein, kann man über mehr nachdenken
  • Flugbahnen - die exakten, elliptischen Flugbahnen von Planetoiden habe ich durch Kreisförmige ersetzt - der Einfachheit halber...
  • Gravitation - Da es annähernd unmögliuch ist, exakte Gravitaiton zwischen mehr, als 2 Objekten zu berechnen, habe ich dort eine "einfache" Formel entwickelt, mit der ich zufrieden bin und arbeite ;) Wenn ein System mehr, als 2 Sonnen hat, wird das entsprechend berechnet, funktioniert aber (bisher) trotzdem ganz gut ;)

.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
__________________
Darelius, Keeper of the Elements
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bei Formular Abfrage einer Datenbank und Eintragung in einer andere ChiiFii MySQLi/PDO/(MySQL) 2 14.04.2010 21:11:23
Probleme mit Datum aus Datenbank auslesen Zippo1979 MySQLi/PDO/(MySQL) 6 18.12.2006 14:27:27
Auslesen und beschreiben einer MySQL Datenbank linux23 MySQLi/PDO/(MySQL) 8 10.12.2006 16:13:22
Text & Variable aus Datenbank auslesen und ausgeben Don Stefano PHP Grundlagen 6 29.09.2005 00:47:18
Problem mit abfrage und ausgabe aus ner Datenbank dali504 MySQLi/PDO/(MySQL) 7 15.03.2005 03:04:11


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:04:46 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt