Zum Inhalt springen

MySQL Wissender gebraucht :)


NoControl
 Teilen

Empfohlene Beiträge

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!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du könntest es mich einem After-Insert-Trigger auf der Tabelle lösen:

https://stackoverflow.com/questions/18728539/mysql-trigger-on-after-insert

 

Kommt ein neuer Wert vom Client X, suche den jeweils neuesten Wert aller anderen, berechne die Werte und schreibe diese in

eine Tabelle deiner Wahl.

 

:confused::D

 

klingt jedenfalls spannend ... danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 5 Monate später...

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....

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

 Teilen

×
×
  • Neu erstellen...