Skall prova och fundera lite på detta i veckan... tydligen måste man jobba lite också.. :)

Återkommer säkert. Stort tack för er hjälp!
 
gadu^ skrev:
Har en enkel databas för elen med en tabell med dessa kolumner
(Senaste rader ser ut såhär)

| Date | house | home
| 2011-12-12 07:50:03 | 398938 | 314927 | NULL | NULL |
| 2011-12-12 07:55:03 | 398956 | 314944 | NULL | NULL |
| 2011-12-12 08:00:06 | 398973 | 314976 | NULL | NULL |
| 2011-12-12 08:05:03 | 398988 | 315015 | NULL | NULL

House och home matas med pulser från räknare A resp B.
...
Om det är så att du vill få ut deltavärden direkt i sql-resultatet så går det också.

Det enda som krävs är att man kommer ihåg föregående rads värde och presenterar aktuell rads värde - ihågkommet värde. Man använder mysql-variabler för detta.

ex:
SET @prev_house=0;
SELECT
Date AS "date",
house-@prev_house AS "delta",
@prev_house:=house AS "house"
FROM
el
ORDER BY Date;

Notera att detta blir 2 st olika querys pga att initieringen av variabeln (SET @prev_house) också ska köras. Antingen kör man 2 separata querys efter varandra (den minns variablerna under hela sessionen) eller så kör man bägge frågorna i samma (separerade med semikolon) men då krävs att man i PHP använder multiquery istället.
 
it-snubben, funkade ju jättebra! :D Stort tack!!

Nu är då frågan, min S0 på elmätaren ger 200 pulser/KWh, jag pollar räknaren var 5e minut.
Har gnuggat de grå (är ganska trög) nu ett tag men får inte till det hur många W förbrukats under de 5 minuter?
 
Är det inte 200 pulser / KW istället för KWh? Dvs om du drar 1 KW i en timme så blir det 200 pulser?

Det går 12 st 5 minuters intervaller på en timme. Då borde det väl vara så att det blir 16.6666 pulser på 5 minuter (200 / 12 ) för varje KW.

Någon annan får rätta mig om jag har fel.

Dvs, dela antal pulser med 16.6666666666. Vilket du givetvis kan göra direkt i sql-satsen :)
 
1kW i en timme är 1kWh och motsvarar 200 pulser?

Vid förbrukningen 1kW kommer det att vara 200/60=3,33 pulser per minut eller 200/60/60=0,055 pulser per sekund eller 200 på 1h.
 
Eller att 1kWs motsvarar 0,05555 pulser...
 
Den 12dec beställde jag 10st DS18S20+ "samples" från Maxim-IC och dra på trissor, de dök upp idag!
 
it-snubben skrev:
Antingen kör man 2 separata querys efter varandra (den minns variablerna under hela sessionen) eller så kör man bägge frågorna i samma (separerade med semikolon) men då krävs att man i PHP använder multiquery istället.
Har haft lite tid idag och provat multi_query... men får det inte att fungera... :blushing:
Så här ser koden ut, i exemplet så vill jag enkelt bara att den skall printa allt

PHP skrev:
<?php
include ("/home/janne/jpgraph/src/jpgraph.php");
include ("/home/janne/jpgraph/src/jpgraph_bar.php");
include_once ("/home/janne/sqlphp/mysql_settings_el.php");

# Connect to the database and select a db
mysql_connect ($mysqlHost, $mysqlUsername, $mysqlPassword);
mysql_select_db ($mysqlDatabase);

// $query = "select timestamp, Outside from newtemps where DAY(timestamp) = DAY(CURDATE())";
// $result = mysql_query($query) or die("SQL fraga felaktig: " . mysql_error());

$query = "SET @prev_house=0;";
$query .= "SELECT Date AS "date", (house-@prev_house)*60 AS "delta", @prev_house:=house AS "house" FROM el ORDER BY Date";

$result = mysql_multi_query($query) or die("SQL fraga felaktig: " . mysql_error());

while($myrow = mysql_fetch_array($result))
{
echo $myrow['date'];
echo $myrow['delta'];

}

?>
Var gör jag fel?
 
gadu^ skrev:
Har haft lite tid idag och provat multi_query... men får det inte att fungera... :blushing:
Så här ser koden ut, i exemplet så vill jag enkelt bara att den skall printa allt



Var gör jag fel?
Ett uppenbart fel som jag ser är i definitionen av SQL-satsen:

php skrev:
$query = "SET @prev_house=0;";
$query .= "SELECT Date AS "date", (house-@prev_house)*60 AS "delta", @prev_house:=house AS "house" FROM el ORDER BY Date";
Du kan inte använda samma typ av citattecken i strängen som det som omger strängen i variabeltilldelningen. Då vet inte PHP vad som tillhör strängen och vad som tillhör texten i strängen. Lösningen är att använda ' (enkelsnuff) inuti strängar som är definerade med " (dubbelsnuff). Alternativt tvärtom.

Byt ut alla " i SQL-satsen mot ' så blir det bättre.

php skrev:
$query = "SET @prev_house=0;";
$query .= "SELECT Date AS 'date', (house-@prev_house)*60 AS 'delta', @prev_house:=house AS 'house' FROM el ORDER BY Date;";
Edit:
Jag kom på att multiquery kräver ett annorlunda förfarande när man ska läsa ut resultat(en) också. Detta eftersom varje separat sql-sats (de är ju avdelade med semikolon ) kan leverera ett svar tillbaka. Därför måste man loopa igenom alla resultat och välja det resultat som man vill ha (antagligen det sista). Men man MÅSTE loopa igenom ALLA resultat.

Dessutom så verkar du inte någonstans i dina frågor referera till någon "handle" för den öppnade databasanslutningen. När man ansluter till databasen (connect) så får man tillbaka ett id för den anslutningen. Detta id ska man använda vid querys för att tala om vilken databasanslutning man vill fråga mot (man kan ha flera databaser öppna samtidigt).

exempel skrev:
function DoMultiQuery($db_conn,$SQLquery) {
//funktion som gör en multiquery och levererar tillbaka resultatet från sista sql-satsen som gav något tillbaka.
// OBS! Använder mysqli, inte mysql

/* execute multi query */
if ($db_conn->multi_query($SQLquery)) {
$lastresult="";
do {
/* first result set */
if ($result = $db_conn->store_result()) {
if ($lastresult) {
$lastresult->free();
}
$lastresult=$result;
}
//next resultset
} while ($db_conn->next_result());
}
if ($db_conn->error) {
echo "Error: " . $db_conn->error . "\n";
}
return $lastresult;
}
användning skrev:
$mysqli_db = new mysqli($dbServer, $dbUser, $dbPass, $dbDatabase);

/* check connection */
if (mysqli_connect_errno()) {
// header("HTTP/1.0 500 Internal Server Error");
die("Connect failed: " . mysqli_connect_error());
}

$result=DoMultiQuery($mysqli_db,$query);

while ($myrow = $result->fetch_assoc()) {
echo $myrow['date'];
echo $myrow['delta'];
}
Som vanligt är ovanstående kod otestad från mig. Notera att den använder mysqli istället för mysql vilket är en bättre klient.
 
Redigerat:
Nånstans vill jag minnas att någon nämnde nåt om "Stored Procedures", så jag googlade lite och skapade följande SP.

Stored Procedure skrev:
BEGIN
SET @prev_house=0;
SELECT Date AS "date", (house-@prev_house)*60 AS "delta", @prev_house:=house AS "house" FROM el ORDER BY Date;
END
Sen ropar jag på den med denna lilla stulna kod...

Stulen kod skrev:
<?php
include ("/home/janne/jpgraph/src/jpgraph.php");
include ("/home/janne/jpgraph/src/jpgraph_bar.php");
include_once ("/home/janne/sqlphp/mysql_settings.php");

# Connect to the database and select a db
$conn = mysql_pconnect ($mysqlHost, $mysqlUsername, $mysqlPassword, 65536) or die( "Failed to connect to MySQL server" );
mysql_select_db( $mysqlDatabase, $conn ) or die( "Could not select test database" );
$result = mysql_query( "CALL GetDelta()" ) or die( mysql_error() );

while($myrow = mysql_fetch_array($result))
{

echo $myrow['date'];
echo $myrow['delta'];
}
?>
Nu är det bara att haka på jgraph på detta så borde det vara fixat! :wow:
Det är för kul detta!!
 
Mycket bra lösning. d^_^b

MVG på detta prov. :cool:

I en SP har du stora möjligheter att bearbeta materialet och du får logiken samlad i databasen. I min "skola" så ska PHP-delen bara vara presentationsskiktet.
 
Ooh!! Mitt första MVG ;)

Kan nog hålla med, trots att man är n00b, att PHP skall nog vara presentationsskiktet...
 
Du har definitivt passerat n00b-stadiet. Jag är imponerad över att du tog steget till SP. Kanske en framtida "kollega" i branschen?

gadu^ skrev:
...Det är för kul detta!!
Jag kan inte annat än hålla med. Just den tillfredsställelsen som blir när något fungerar som man tänkt sig är så skön. Att sedan många andra inte förstår och tycker "so what" får man bortse från.

Var inte blygsam med att fråga om råd och hjälp.
 
Jobbat med affärssystem ett par år nu, dock från ett användarperspektiv (kravställning, support etc). Men i den nya tjänst jag har sen oktober så kommer jag obönhörligen närmare back-end delarna och måste iaf ha djupare förståelse om databashantering. Vad är då bättre än att labba med detta hemma också? :)

Tackar för all support!
 
Vi vill skicka notiser för ämnen du bevakar och händelser som berör dig.