NoControl Geschrieben 18. Juli 2018 Teilen Geschrieben 18. Juli 2018 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!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Inigo Montoya Geschrieben 18. Juli 2018 Teilen Geschrieben 18. Juli 2018 Warum für jeden Client eine eigene Tabelle? Berechnung einfach mit der Programmiersprache deiner Wahl errechnen und in neue Tabelle speichern. Oder übersehe ich da irgendwas? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
der Markus Geschrieben 18. Juli 2018 Teilen Geschrieben 18. Juli 2018 Erweiterte Gegenfrage: Wie rechnest denn die Entfernung zueinander? Aber nicht nur als Luftlinie, das wäre nämlich Pfuigack. Schon mit Routing, oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MTB-Pirate Geschrieben 18. Juli 2018 Teilen Geschrieben 18. Juli 2018 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
NoControl Geschrieben 18. Juli 2018 Autor Teilen Geschrieben 18. Juli 2018 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
NoControl Geschrieben 18. Juli 2018 Autor Teilen Geschrieben 18. Juli 2018 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bike_R Geschrieben 18. Juli 2018 Teilen Geschrieben 18. Juli 2018 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2slow Geschrieben 18. Juli 2018 Teilen Geschrieben 18. Juli 2018 Die Entfernungen zueinander würde ich nur beim Eintreffen v neuen Werten bzw für Zeitpunkt x berechnen u nicht i der DB speichern. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
NoControl Geschrieben 19. Juli 2018 Autor Teilen Geschrieben 19. Juli 2018 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
NoControl Geschrieben 19. Juli 2018 Autor Teilen Geschrieben 19. Juli 2018 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mafe Geschrieben 19. Juli 2018 Teilen Geschrieben 19. Juli 2018 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
NoControl Geschrieben 19. Juli 2018 Autor Teilen Geschrieben 19. Juli 2018 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. klingt jedenfalls spannend ... danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mafe Geschrieben 19. Juli 2018 Teilen Geschrieben 19. Juli 2018 http://sqlfiddle.com/#!9/fb736e/4 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
NoControl Geschrieben 19. Juli 2018 Autor Teilen Geschrieben 19. Juli 2018 http://sqlfiddle.com/#!9/fb736e/4 Danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
GrazerTourer Geschrieben 5. Januar 2019 Teilen Geschrieben 5. Januar 2019 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.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mafe Geschrieben 5. Januar 2019 Teilen Geschrieben 5. Januar 2019 Entweder Subselect oder eleganter mit einer Funktion. Das Fiddle sollte helfen: https://www.db-fiddle.com/f/pc4B5uFdt4KG7dioLCuygN/0 lg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
GrazerTourer Geschrieben 5. Januar 2019 Teilen Geschrieben 5. Januar 2019 Vui super, danke! wird dann glei eingebaut. Jippie, da freut man sich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.