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

TYPO3 Kochbuch

TYPO3 Kochbuch 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)
Hilfe Community Kalender Heutige Beiträge Suchen

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 08.11.2010, 11:55:24
phoo phoo ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 41
Beiträge: 2
den Datensatz mit DeviceID, ValueID und höchster UnixTime

Hallo, bin neu hier und habe ein Problem mit einer Abfrage:

Ich habe eine Tabelle mit folgenden Spalten:

Id, unixtime, id_device, id_messwert, messwert

bedeutet von verschiedenen Messgeräten werden Messwerte in die Tabelle
eingetragen. Nun habe ich den OPC-Server so pgrogrammiert,
dass er nur einen Wert einträgt, wenn er sich zum vorherigen Wert geändert hat.

Sprich die Tabelle könnte nach 7 Datensätzen z.Bsp so aussehen:

id unixtime id_device id_messwert messwert
1 100 7 1 0.2
2 100 7 2 0.3
3 100 7 3 0.4
4 160 7 1 0.5
5 160 7 2 0.6
6 220 7 2 0.7
7 280 7 2 0.8


Nun möchte ich mit einer Abfrage den letzten Datensatz für id_device=7 und id_messwert=1, id_device=7 und id_messwert=2 und id_device=7 und id_messwert=3

sprich (ergebnis):
id unixtime id_device id_messwert messwert
4 160 7 1 0.5
7 280 7 2 0.8
3 100 7 3 0.4

am liebsten auch geordnet nach id_messwert .p

sämtliche distinct, group by, order by kombinationen und joins mit tabelle selbst
habe ich getestet, aber entwerder ich bekomme die ersten anstatt die letzten datensätze oder nicht sortiert oder oder oder.... :/

hoffe einer von euch kann mir iwie weiterhelfen

vielen dank

gruss, phoo




NACHTRAG:

glaube ich habs ^^ allerdings falschrum sortiert, aber das egal, da ich die daten mit php+for-loop ausgeben werde

SELECT * from measurements where id_device=7 GROUP BY id_messwert DESC;
Mit Zitat antworten
  #2  
Alt 08.11.2010, 12:24:33
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: den Datensatz mit DeviceID, ValueID und höchster UnixTime

Hi

Zitat:
glaube ich habs
Denke ich nicht denn dein GOUP BY ... DESC wird dich zum Ziel führen
Du brauchst ne Kombination aus JOIN und GROUP

mfg

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #3  
Alt 08.11.2010, 13:01:57
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: den Datensatz mit DeviceID, ValueID und höchster UnixTime

Mein Vorschlag sieht mal so aus:

Code:
CREATE TABLE measurements (
 id INT NOT NULL,
 unixtime INT NOT NULL,
 id_device INT NOT NULL,
 id_messwert INT NOT NULL,
 messwert DEC(10,2) NOT NULL,
 PRIMARY KEY(id)
);

INSERT INTO measurements VALUES
( 1, 100, 7, 1, 0.2),
( 2, 100, 7, 2, 0.3),
( 3, 100, 7, 3, 0.4),
( 4, 160, 7, 1, 0.5),
( 5, 160, 7, 2, 0.6),
( 6, 220, 7, 2, 0.7),
( 7, 280, 7, 2, 0.8);

SELECT m1.id, m1.unixtime, m1.id_device, m1.id_messwert, m1.messwert
  FROM measurements m1
  JOIN (SELECT id_device, id_messwert, MAX(unixtime) AS max_unixtime
          FROM measurements
         GROUP BY id_device, id_messwert
       ) m2
    ON m1.id_device = m2.id_device
   AND m1.id_messwert = m2.id_messwert
   AND m1.unixtime = m2.max_unixtime
ORDER BY m1.id_messwert;

+----+----------+-----------+-------------+----------+
| id | unixtime | id_device | id_messwert | messwert |
+----+----------+-----------+-------------+----------+
|  4 |      160 |         7 |           1 |     0.50 |
|  7 |      280 |         7 |           2 |     0.80 |
|  3 |      100 |         7 |           3 |     0.40 |
+----+----------+-----------+-------------+----------+
3 rows in set (0.01 sec)

mysql>
Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
  #4  
Alt 08.11.2010, 18:16:55
phoo phoo ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 41
Beiträge: 2
AW: den Datensatz mit DeviceID, ValueID und höchster UnixTime

thx für die schnellen antworten .p

also ich glaube mit meiner abfrage geht es auch, nur dass es halt in descendant order
ausgegeben wird.

sprich er geht die tabelle von hinten durch, und nimmt jeweils den ersten datensatz den
er findet zu einem bestimmten id_messwert (ist ja dann praktisch der letzte eingetragene)

aber ich muss zugeben, ich hab es nur mit einem referenzwert getestet der
vorher falsch war (vorher der erste eingetragene)

ich werde morgen auf arbeit gleich mal eure abfrage testen ^^
dann ist es auch direkt in ascendent-order .p

thx nochmal
Mit Zitat antworten
  #5  
Alt 08.11.2010, 19:00:49
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: den Datensatz mit DeviceID, ValueID und höchster UnixTime

Hi

einer von uns beiden ist auf dem Holzweg.
Zitat:
sprich er geht die tabelle von hinten durch
versus
DESC bestimmt die Ausgabe nicht die Abarbeitung.

mfg

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #6  
Alt 09.11.2010, 11:44:41
KTB KTB ist offline
Member
 
Registriert seit: Mar 2006
Alter: 38
Beiträge: 599
AW: den Datensatz mit DeviceID, ValueID und höchster UnixTime

Was für ein schöner Zufall. Ich bin vorhin im Prinzip auf das gleiche Problem wie Phoo gestoßen. Danke Thomas für deinen Beitrag, dieser hat mich zur Lösung meines Problems gebracht :)
__________________
In der Ruhe liegt die Kraft!
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:14:52 Uhr.


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


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