MySQL: Meerdere gegevens lezen uit diverse tabellen
Ik ben bezig met een weergave van diverse informatie welke ik uit een database moet halen. Dit betreft een gewone sql database met phpmyadmin.
Het zit zo:
Elke 10 minuten worden er waardes opgehaald welke worden gestored in de database.
Ik heb een paar tabellen welke de volgende naam hebben:
- history_ekwh
- history_gas
- hisotry_h2o
- history_tempinside
daarin staan elke keer cellen in elke tabel:
- value
- valuedatetime
Nu is mijn vraag hoe ik het voor elkaar krijg dat ik een tabel kan weergeven die de waardes weergeef die overeenkomen in elke tabel per valuedatetime.
Kan iemand me hier bij vooruit helpen? Mocht er meer info nodig zijn dan hoor ik dit graag!
Alvast vriendelijk bedankt!
Juin
Toevoeging op 21/08/2012 11:04:04:
Hier een voorbeeld van wat ik voor elkaar zou willen krijgen:
Ik heb het idee dat je 1 op 1 relaties legt die volledig overbodig zijn. Zo te zien is je valuedatetime de kolom waarop je identificeert, en als die dus in iedere tabel uniek is en ook in elke tabel voorkomt is het raadzaam om er één tabel van te maken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = "SELECT * FROM history ORDER BY valuedatetime";
$result = mysql_query($sql);
if (mysql_num_rows($result) >= 1) {
echo "<table><tr><td>Date - Time</td><td>Temp inside</td><td>Temp outside</td><td>Power usage</td><td>Gas usage</td><td>H20 usage</td><td>CO2</td></tr>";
while ($row = mysql_fetch_array($result)) {
echo "<tr><td>" . $row["valuedatetime"] . "</td><td>" . $row["valuetempinside"] . "</td><td>" . $row["valuetempoutside"] . "</td><td>" . $row["valuepowerusage"] . "</td><td>" . $row["valuegasusage"] . "</td><td>" . $row["valueh2ousage"] . "</td><td>" . $row["valueco2"] . "</td></tr>";
}
echo "</table>";
}
?>
$sql = "SELECT * FROM history ORDER BY valuedatetime";
$result = mysql_query($sql);
if (mysql_num_rows($result) >= 1) {
echo "<table><tr><td>Date - Time</td><td>Temp inside</td><td>Temp outside</td><td>Power usage</td><td>Gas usage</td><td>H20 usage</td><td>CO2</td></tr>";
while ($row = mysql_fetch_array($result)) {
echo "<tr><td>" . $row["valuedatetime"] . "</td><td>" . $row["valuetempinside"] . "</td><td>" . $row["valuetempoutside"] . "</td><td>" . $row["valuepowerusage"] . "</td><td>" . $row["valuegasusage"] . "</td><td>" . $row["valueh2ousage"] . "</td><td>" . $row["valueco2"] . "</td></tr>";
}
echo "</table>";
}
?>
nu staat alles in de tabel history met de cellen: valuedatetime, valuetempinside, valuetempoutside, valuepowerusage, valuegasusage, valueh2ousage, valueco2
Gewijzigd op 21/08/2012 11:36:38 door lex van der poel
Laat het zo weten.
Nogmaals bedankt zover!
Ik heb de code trouwens niet getest maar als het goed is komt er een soort gelijke tabel en als de info fout om staat plaats dan DESC agter aan de query. :)
Is er geen manier om dit voor elkaar te krijgen volgens jullie?
Hierbij ook nog een screenshot wat het misschien makkelijker maakt te zien hoe het nu in elkaar zit.
Screenshot:
Gewijzigd op 21/08/2012 11:55:35 door Juin Juinse
je kan wel gewoon verschillende cellen updaten als ik jou was zou ik alles in een tabel zetten scheelt heel veel hoofdpijn opwekkende code ;)
Er kunnen namelijk meerdere devices bij komen die ook de info aanbieden aan de database...
en jij wilt dat alle info uit een tabel aan 1 "device" is gekoppeld?
Het werkt namelijk met een parser script welke elke 10 minuten de values van de betreffende device schrijft naar de database.
Dit kunnen inderdaad meerdere devices zijn en ik wil ze zo storen in een database dat ik er makkelijk mee kan werken met highcharts en berekeningen er op los kan laten (bijvoorbeeld wat de gemiddelde temperatuur is geweest van de laatste 7 dagen)
Maar als je zegt dat het op een andere manier storen in de database toch misschien wel beter is dan kan ik natuurlijk ook op een andere manier de database gaan opzetten. Ik ben nu nog bezig met dit beginsel dus kan nog van alles doen, geen probleem maar ik vindt het lastig te beslissen wat het beste is nu..
Toevoeging op 21/08/2012 12:04:59:
Misschien is het inderdaad beter om alles in 1 tabel te plaatsen en wanneer ik de values van 1 device wil hebben dat ik hem dan filter dat hij alleen de waardes van die device moet pakken ofzo?
je kan ook in de mysql query dit toevoegen om alle gegevens van een divice op te roepen: "WHERE valuedeviceid = 'hier het id van divice'"
Toevoeging op 21/08/2012 12:10:44:
ik denk dat ik gewoon eerst eens ga beginnen om alles in 1 database te gooien. Ik heb eens zitten denken en misschien dat dit toch het beste is. Dan zou de code je eerder schreef ook werken en scheelt het me wel een hoop extra coding denk ik zo. En als ik inderdaad kan filteren op device id zou het geen probleem moeten zijn. En ik hoef maar 1 keer de valuedatetime te storen en niet net als nu in elke tabel, wat ook weer schijfruimte scheelt en 3G kosten wanneer de devices via internet gaan lopen natuurlijk.
is goed en als je hulp nodig hebt vraag je het maar heb toch niet veel te doen ;)
Zo ja (uitzonderingen daargelaten), dan is het beste om alles in 1 tabel te zetten.
Zo nee, dan kan je overwegen om de gegevens los op te slaan. In dit geval zou je anders namelijk veel lege velden krijgen en dat is inefficient en dus zonde. Het betekent echter wel veel meer werk en complexere queries (hoewel je die met een view zou kunnen afdekken).
En Lex ik ga nu aan de gang en je hoort vast nog van me denk ik ;)
Ik ga eerst de parser nu aanpassen dat alles in 1 tabel komt met het deviceid erbij. Daarna meldt ik me hier weer ;)
oke succes er mee ;)
Al doende datamodellering met in gedachten hoe je het op moet halen en tonen is de verkeerde insteek. Maak eerst je datamodel volgens de regels van datamodellering (om te beginnen derde normaalvorm) en aansluitend zul je alles met queries op kunnen vragen wat je wilt hebben.
John D op 21/08/2012 13:52:53:
Al doende datamodellering met in gedachten hoe je het op moet halen en tonen is de verkeerde insteek. Maak eerst je datamodel volgens de regels van datamodellering (om te beginnen derde normaalvorm) en aansluitend zul je alles met queries op kunnen vragen wat je wilt hebben.
Hoi John,
Bedankt voor je reactie. Daar heb je inderdaad gelijk in. Maar ik weet niet helemaal hoe ik dit het beste kan doen. :-/
Juin Juinse op 21/08/2012 13:54:15:
... Maar ik weet niet helemaal hoe ik dit het beste kan doen. :-/
http://www.phphulp.nl/php/tutorial/overig/normaliseren/150/
Kris Peeters op 21/08/2012 13:55:17:
http://www.phphulp.nl/php/tutorial/overig/normaliseren/150/
Juin Juinse op 21/08/2012 13:54:15:
... Maar ik weet niet helemaal hoe ik dit het beste kan doen. :-/
http://www.phphulp.nl/php/tutorial/overig/normaliseren/150/
Thanks ik ga het eens even bekijken