Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi

 

 

Gibt es hier einen MySQL Wissenden der mir bei einem kleinen (Anfänger) Problem helfen kann?

 

Folgendes Problem:

 

Ich habe (eine ungewissen Anzahl) Clients die in eine Datenbank auf einem Server schreiben.

Jeder Client generiert eine eigene Tabelle in dieser DB und schreibt alle 30 Sekunden rein.

Jede Tabelle sieht (fürs erste) wie folgt aus:

 

UniqueID - Position LAT - Position LONG - Timestamp

 

 

Nun würde ich gerne die aktuellste Position von Client1 (Tabelle1) hernehmen und die Distanz zu allen Clients berechnen.

Dann von Clients 2 zu allen anderen usw. .... und das dann laufend

 

 

Klingt jetzt mal unspannend vermutlich ... ist es aber nicht ;)

 

 

Freue mich auf Hinweise und Tipps

 

 

Danke schon im voraus!!

Geschrieben

Ich würde Positionen der einzelnen Clients in EINER Tabelle Speichern.

Die Ergebnisse der Berechnung dann in einer zweiten Tabelle.

 

Für die Berechnung der Distanzen ergibt sich die Frage: Willst du das in der Datenbank berechnen (z.b. über Datenbanktrigger) oder hast du auf dem Server wo die Datenbank ist auch einen Serverprozess am laufen der die Berechnung machen kann.

Geschrieben
Erweiterte Gegenfrage: Wie rechnest denn die Entfernung zueinander? Aber nicht nur als Luftlinie, das wäre nämlich Pfuigack. Schon mit Routing, oder?

 

plan wäre mit der haversinischen formel

Geschrieben
Ich würde Positionen der einzelnen Clients in EINER Tabelle Speichern.

Die Ergebnisse der Berechnung dann in einer zweiten Tabelle.

 

Für die Berechnung der Distanzen ergibt sich die Frage: Willst du das in der Datenbank berechnen (z.b. über Datenbanktrigger) oder hast du auf dem Server wo die Datenbank ist auch einen Serverprozess am laufen der die Berechnung machen kann.

 

dachte daran das in der DB zu rechnen ... keine ahnung ob das gscheit ist

 

die clients schreiben alle 30 sekunden ihre aktuelle position in die tabelle ... wenn dann eine anzahl "n" die position in nur eine tabelle schreibt wirds äußerst unübersichtlich .... zumal das über mehrere stunden gehen kann

Geschrieben

Für jeden User eine Tabelle zu erstellen erzeugt unnötigen Overhead und ist nicht sauber (Wartung, usw). Unübersichtlich ist da nichts, weil du kannst ja einfach nach einem User suchen (oder einen View, virtuelle Tabelle o.Ä. machen).

 

Mach' 2 Tabellen:

 

Table_users (UserId primary key)

Table_data (UserId, unqiueId, timestamp, etc.)

 

Je nach Datenabfrage auch noch Indizes erstellen (wegen Performance). Die Haversin-Formel kannst du in MySQL programmieren.

Geschrieben
Für jeden User eine Tabelle zu erstellen erzeugt unnötigen Overhead und ist nicht sauber (Wartung, usw). Unübersichtlich ist da nichts, weil du kannst ja einfach nach einem User suchen (oder einen View, virtuelle Tabelle o.Ä. machen).

 

Mach' 2 Tabellen:

 

Table_users (UserId primary key)

Table_data (UserId, unqiueId, timestamp, etc.)

 

 

OK Danke für den Tip

Geschrieben
Die Entfernungen zueinander würde ich nur beim Eintreffen v neuen Werten bzw für Zeitpunkt x berechnen u nicht i der DB speichern.

 

naja ... neue Werte kommen laufend rein .... wenn hunderte clients alle 30sek reinschreiben

  • 5 Monate später...
Geschrieben

Ich häng mich mal gerne hier an :)

 

Ich mach viel zu wenig mit Datenbanken (alle x Jahre einmal eine Abfrage *g*) und vergesse wieder wie ich da denken muss. Wie kombiniere ich denn die beiden Select Statements vernünftig? Union geht nicht, weil sich mySQL die gleiche ANzahl an Spalten erwartet.

 

 

1. Abfrage:

SELECT year(t.date) as date,

round(avg(t.temp_avg),1) as temp_avg,

min(t.temp_min) as temp_min,

max(t.temp_max) as temp_max,

round(avg(t.hum_avg),1) as hum_avg,

round(avg(t.hum_min),1) as hum_min,

round(avg(t.hum_max),1) as hum_max,

round(avg(t.wind_avg),1) as wind_avg,

min(t.wind_min) as wind_min,

max(t.wind_max) as wind_max,

round(avg(t.press_avg),1) as press_avg,

round(min(t.press_min),1) as press_min,

round(max(t.press_max),1) as press_max,

sum(t.rain_sum) as rain_sum,

sum(t.sunhours) as sunhours

FROM tagesdaten as t group by year(t.date)

(das Ergebnis sieht so aus)

 

 

2. Abfrage

SELECT year(date) as date, count(temp_min) as Eistage FROM `tagesdaten` WHERE temp_min

 

Das Ergebnis ist immer eine Zeile pro Jahr mit ein paar Spalten. Ich hätte gerne die Spalte "Eistage" der zweiten Abfrage als Spalte bei der ersten Abfrage mit dabei.

 

Normal bin ich net so deppat, aber irgendwie steh ich heute am Schlauch....

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...