Probleme mit SQL-Abfrage

Ich habe probleme mit folgendem Scrpit:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Temp_Min_Max.ips.php
Trigger  : 
Interval : 
*/
/* Datenbankserver - In der Regel die IP */
  $db_server = "localhost";
/* Datenbankname */
  $db_name = "ipsdata";
/* Datenbankuser */
  $db_user = "root";
/* Datenbankpasswort */
  $db_passwort = "root";

/* Erstellt Connect zu Datenbank her */
$db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort);
$db_select = @MYSQL_SELECT_DB($db_name);

$date=date('"Y-m-d"');

$query1 ="SELECT min(KS300_Temp) FROM data where date=$date";
$query2 ="SELECT max(KS300_Temp) FROM data where date=$date";
$query3 ="SELECT avg(KS300_Temp) FROM data where date=$date";
echo $query1;

$tempmin = mysql_query($query1);
$tempmax = mysql_query($query2);
$tempavg = mysql_query($query3);

echo $tempmin;
echo $tempmax;
echo $tempavg;


$tempmin = round($tempmin,2);
$tempmax = round($tempmax,2);
$tempavg = round($tempavg,2);

SetValueFloat("TempMin", $tempmin);
SetValueFloat("TempMax", $tempmax);
SetValueFloat("TempAvg", $tempavg);
?>

Der Wert für Query1 ist SELECT min(KS300_Temp) FROM data where date=„2006-10-20“. Das sollte also richtig sei, doch bemomme ich als Werte nur „Resource id #3“ für $tempmin.
Wo liegt denn wohl der Fehler? In PHPMyAdmin funktioniert die Abfrage.

Gruß,
Björn

versuch mal das direkt::confused:

'SELECT min(KS300_Temp) FROM data where date="$date"'

oder du hast noch Uhrzeiten mit in deinem Date-Feld. Dann musst du sowas in der Art schreiben:

where date >= "2006-10-20 00:00:00" AND date <= "2006-10-20 23:59:59"

Alternativ: Between

Es gibt da manchmal seltsame Dinge, auch wenns alles Ansi-SQL sein soll…

Toni

Macht leider alles keinen Unterschied :frowning:

Und ohne zeit-beschränkung?
kannst du exact wissen ob der fehler in die zeit notiz liegt oder etwas anderes faul ist.

my 2 cents

Es muss etwas anderes sein, da ich auch ohne Zeitbeschränkung keine vernünftigen Daten bekomme.

Ok, bin dem Fehler auf der Spur. Ich muss mit mysql_fetch_array die Werte erst abholen, ich weiß zwar noch nicht so ganz wie, aber das wird noch :wink:

An den Kopf schlag… Hast recht! Das fehlt ja völlig…

Meine aktive PHP-Zeit ist schon ne Weile her… Wird mal wieder Zeit für nen Auffrischungskurs…

versuchs so oder so ähnlich:


$query1 ="SELECT min(KS300_Temp) as Minimal FROM data where date=$date"; 

$tempmin = mysql_query($query1);


while($row = mysql_fetch_array($tempmin))
{
	echo $row['Minimal'];
}

Frei Hand getippt, also ohne Gewähr!

Toni

Danke!!
So, hier das Script wie es funktioniert:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Temp_Min_Max.ips.php
Trigger  : 
Interval : 
*/
$MySQLHost="localhost";
$username="root";
$password="root";

function dbopen(){
   global $MySQLHost,$username,$password;
   $link = mysql_connect($MySQLHost, $username, $password) or die("Keine Verbindung möglich!");
   mysql_select_db("ipsdata") or die("Auswahl der Datenbank fehlgeschlagen");
   return $link;
  }

// Datenbank oeffnen
$link=dbopen();

$date=date('"Y-m-d"');

$query1 ="SELECT min(KS300_Temp) FROM data where date=$date";
$query2 ="SELECT max(KS300_Temp) FROM data where date=$date";
$query3 ="SELECT avg(KS300_Temp) FROM data where date=$date";

$tempmin = mysql_query($query1);
$tempmax = mysql_query($query2);
$tempavg = mysql_query($query3);

while ($rowmin = mysql_fetch_array($tempmin, MYSQL_BOTH)) {
   $Tempmin=$rowmin[0];
}
while ($rowmax = mysql_fetch_array($tempmax, MYSQL_BOTH)) {
   $Tempmax=$rowmax[0];
}
while ($rowavg = mysql_fetch_array($tempavg, MYSQL_BOTH)) {
   $Tempavg=$rowavg[0];
}

mysql_close($link);

$Tempmin = round($Tempmin,1);
$Tempmax = round($Tempmax,1);
$Tempavg = round($Tempavg,1);

SetValueFloat("TempMin", $Tempmin);
SetValueFloat("TempMax", $Tempmax);
SetValueFloat("TempAvg", $Tempavg);
?>

Kurze Erklärung wofür das Ganze.
Das Script greift auf die eine SQL Datenbank zu die mit dem SQL-Script von elektrofreak gefüttert wird. Als ergebnis bekomme ich den Maximum-, Minimum-, und Durchschnittswert des jeweiligen Tages. Die Werte lasse ich mir dann über den Designer anzeigen.

MYSQL_BOTH kannste dir sparen - ist die Standardeinstellung fürs fetch_array. Alles was du weglässt verwirrt nicht mehr unnötig wenn du in nem Jahr oder so nochmal drauf schaust.

Schön, dass es läuft…

Toni

So viel zum Thema Lernfaktor :wink: wieder um einige Erfahrung schlauer.

Das gleiche Problem gab es übrigens auch schon vor 4 Wochen:

Die Query liefert meistens nur die Resource zurück, die mit fetchxxx erstmal in ein Array gelesen werden muss.

Tommi