Joomla.it Forum
Non solo Joomla... => Database => : opsosa 07 Dec 2013, 19:22:21
-
ciao, chiedo il vostro prezioso aiuto per riuscire ad estrarre dei dati dal mio database.
vorrei estrarre il valore massimo registrato indicando anche la data ed ora in cui è stato registrato.
la tabella ha i campi dataora valore1 a me interessa che restituisca il valore1 massimo ed a fianco la dataora
-
attualmente sono riuscito con questa query:
SELECT TEMP, TIMESTAMP_LOCAL FROM METEO WHERE TIMESTAMP_LOCAL >= '2013-12-08 00:00:00' AND TIMESTAMP_LOCAL <= '2013-12-08 23:59:59' ORDER BY TEMP DESC limit 1[code]
il problema è che vorrei cercasse da solo la data corrente...qualche suggerimento?
-
https://www.google.it/search?q=mysql+data+corrente
banale no? anche mysql ha funzioni
-
SELECT HUM, TIMESTAMP_LOCAL FROM METEO WHERE `TIMESTAMP_LOCAL` >= CURDATE() ORDER BY HUM DESC limit 1
al momento sono arrivato a questa soluzione...
il risultato sembra giusto, ora vorrei che invece di mettere la data e l'ora mi visualizzasse solo l'ora
-
Prova con "date format" http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format
-
SELECT TEMP, DATE_FORMAT(TIMESTAMP_LOCAL, '%H:%i') FROM METEO WHERE `TIMESTAMP_LOCAL` >= CURDATE() ORDER BY TEMP ASC limit 1
ho fatto cosi e sembra andare che ne dici?
-
ora ho un problema,,,vorrei che i dati che ho recuperato con le query, venissero riportate in una tabellina
avete altri suggerimenti?
-
ciao, scusa ma non ho capito che fa quella query :o
sicuramente è uno dei modi più fantasiosi mai visti per evitare una funzione di aggregazione ;D ;D
SELECT MAX(`TEMP`) AS `MAXTEMP`, TIME(`TIMESTAMP_LOCAL`) AS `LOCALTIME`
FROM `METEO`
WHERE DATE(`TIMESTAMP_LOCAL`) = CURDATE()
GROUP BY DATE(`TIMESTAMP_LOCAL`)
l'ultima riga in mysql è facoltativa... mah!
MAXTEMP e LOCALTIME contengono i valori cercati.
parte 2
come li recuperi? in php?
dove sono? nel DB di joomla?
dove li vuoi stampare? in un modulo?
ciao,
marco
-
allora si devo recuperarli in php.
il database non è quello di joomla
e li vorrei visualizzare in un modulo joomla
io attualmente faccio le prove con il modulo wrapper collegandolo al file php..
ora il problema è che
dovrei vedere una roba del genere
tabella db di esempio:
nome tabella :DATI
campi tabella DATI: datetime, valore1, valore2, valore3
quello che vorrei ottenere è una tabella del genere:
_____________MINIMO________ORA DEL GIORNO____
valore1 | | |
_______________________________________ _______
valore2 | | |
_______________________________________ _______
valore3 | | |
_______________________________________ _______
-
tanto per orientarci, vuoi sviluppare un modulo per joomla o vuoi usare continuare ad usare il modulo wrapper?
nel wrapper immagino tu abbia già il codice di collegamento al db e di esecuzione della query; ora, sai come recuperare il recorset (i dati recuperati) o devi ancora capirlo?
ciao
-
Mi sembra più comodo richiamare il file usando il modulo wrapper,
ho fatto qualcosa ma molto macchinoso
<html>
<body>
<?php
$myconn = mysql_connect('', '', '') or die('Errore...');
mysql_select_db('', $myconn) or die('Errore...');
$query="SELECT valore1, DATE_FORMAT(dataora, '%H:%i') FROM DATI WHERE `dataora` >= CURDATE() ORDER BY valore1 ASC limit 1";
$result = mysql_query($query, $myconn) or die('Errore...');
$numrows = mysql_num_rows($result);
if ($numrows==0){
echo "Database vuoto!";
}
else
{
for($x=0; $x<$numrows; $x++){
$resrow = mysql_fetch_row($result);
$valore1= $resrow[0];
$dataora = $resrow[1];
}
}
?>
<table border="1" cellspacing="8" cellpadding="6">
<tr>
<th><font face="Arial, Helvetica, sans-serif">VALORE MAX</font></th>
<th><font face="Arial, Helvetica, sans-serif">ORA</font></th>
</tr>
<tr>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $valore1;?> %</font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $dataora;?></font></td>
</tr>
</body>
</html>
-
ti suggerisco due varianti
questa è meno specifica ma più chiara ed espandibile
<html>
<body>
<?php
$myconn = mysql_connect('', '', '') or die('Errore...');
mysql_select_db('', $myconn) or die('Errore...');
$query="
SELECT MAX(`TEMP`) AS `MAXTEMP`, TIME(`TIMESTAMP_LOCAL`) AS `LOCALTIME`
FROM `METEO`
WHERE DATE(`TIMESTAMP_LOCAL`) = CURDATE()
GROUP BY DATE(`TIMESTAMP_LOCAL`)
";
$result = mysql_query($query, $myconn) or die('Errore...');
$numrows = mysql_num_rows($result);
if (!$numrows){
echo "Database vuoto!";
}
?>
<table>
<tr>
<th>VALORE MAX</th>
<th>ORA</th>
</tr>
<?php while ($r = mysql_fetch_assoc($result)) : ?>
<tr>
<td><?php echo $r['MAXTEMP'];?> %</td>
<td><?php echo $r['LOCALTIME'];?></td>
</tr>
<?php endwhile; ?>
<table>
</body>
</html>
questa è più specifica, ma meno chiara da espandere
<html>
<body>
<?php
$myconn = mysql_connect('', '', '') or die('Errore...');
mysql_select_db('', $myconn) or die('Errore...');
$query="
SELECT MAX(`TEMP`) AS `MAXTEMP`, TIME(`TIMESTAMP_LOCAL`) AS `LOCALTIME`
FROM `METEO`
WHERE DATE(`TIMESTAMP_LOCAL`) = CURDATE()
GROUP BY DATE(`TIMESTAMP_LOCAL`)
";
$result = mysql_query($query, $myconn) or die('Errore...');
$numrows = mysql_num_rows($result);
?>
<table>
<tr>
<th>VALORE MAX</th>
<th>ORA</th>
</tr>
<?php if (!$numrows): ?>
<tr>
<td colspan="2">Database vuoto!</td>
</tr>
<?php else ?>
<tr>
<?php list($temp, $time) = mysql_fetch_row($result); ?>
<td><?php echo $temp;?> %</td>
<td><?php echo $time;?></td>
</tr>
<?php endif; ?>
<table>
</body>
</html>
nota che in ambo i casi ho scritto senza verificare, quindi magari qualche errorino mi può essere scappato ::)
ciao
-
ok domani le provo, ma mi sembra che comunque che sia come avevo fatto io, il mio problema è riportare nella stessa tabella i risultati di query diverse fatte ...non so se mi sono spiegato bene...
grazie per l'aiuto...
-
ma mi sembra che comunque che sia come avevo fatto io
senza offesa, ma mica tanto.
il mio problema è riportare nella stessa tabella i risultati di query diverse fatte
ripeti le queries in serie recuperando il risultato di ciascuna prima di effettuare la successiva, od usando diversi nomi per l'handler del recordset (= il valore restituito da mysql_query).
il secondo esempio dovrebbe essere quello che calza meglio.
-
spe fammi capire per metterlein serie io ricopio da:
$query=".............
if (!$numrows){
echo "Database vuoto!";
}
fino a qui? cioè prima della tabella?
e poi mi basta cambiare il nome qui? $result
cambiandolo per ogni query?
ma poi nella tabella come faccio?
io ho ore diverse per ogni valore della query...
comunque farò dei tentativi in serata e ti faccio sapere ciao
-
<html>
<body>
<?php
$myconn = mysql_connect('', '', '') or die('Errore...');
mysql_select_db('', $myconn) or die('Errore...');
?>
<table>
<tr>
<th>VALORE MAX</th>
<th>ORA</th>
</tr>
<!--- ripeti da qui (copia e incolla)--->
<?php
$query="SELECT 1 AS `C1`, NOW() AS `C2`";
$result = mysql_query($query, $myconn) or die('Errore...');
if (!mysql_num_rows($result)):
?>
<tr>
<td colspan="2">Non pervenuto!</td>
</tr>
<?php else: ?>
<tr>
<?php
list($value, $time) = mysql_fetch_row($result);
?>
<td><?php echo $value;?> %</td>
<td><?php echo $time;?></td>
</tr>
<?php endif; ?>
<!--- fino a qui --->
<table>
</body>
</html>
copia ed incolla cambiando solo il codice della query...
-
ahhhh spe che sei troppo avanti per me...
mi fai capire cosa hai fatto, altrimenti copio ma non capisco a che serve,,
ho copiato tutto quello che hai messo nel codice e messo la query
ora il risultato è questo:
-
allora, il codice è diviso in tre parti
la prima, fino a <!--- ripeti da qui (copia e incolla)--->, contiene l'inizializzazione del codice e l'apertura della tabella. la connessione al server db e la selezione del db debbono essere fatte una volta sola, così come basta una sola tabella. pertanto creiamo la tabella e stampiamo la riga di intestazione. a proposito della tabella: non è che manca la colonna con la tipologia del valore stampato?
la seconda da <!--- ripeti da qui (copia e incolla)---> a <!--- fino a qui --->, recupera i dati dal db e li stampa in una riga. devi copiare questa parte di codice tante volte quante sono le queries che vuoi eseguire, cambiando solo il codice sql. è però necessario che ciascuna query restituisca sempre e solo due valori e nel preciso ordine parametro meteo, tempo.
list($value, $time) = mysql_fetch_row($result);
list() prende i due valori selezionati dalla query e contenuti nell'array restituito da mysql_fetch_row() e li salva nelle due variabili $value, $time, nell'ordine in cui sono; ed ecco perchè è importante l'ordine dei valori nella query.
la terza parte da <!--- fino a qui ---> alla fine, beh, dai questo è banale ;)
poi, a voler proprio essere pignoli, un
<?php mysql_close($myconn); ?>
subito dopo la citata demarcazione non ci starebbe neanche malissimo...
ora, manuale php e mysql a portata di mano e buon divertimento!
ciao,
marco
-
ok grazie per la spiegazione molto chiara.
ho provato con la tua query ma mi restituisce sempre la stessa ora..mentre con quelle che usavo prima funziona correttamente...
comunque mo sistemo la tabela e ci siamo...
-
mentre con quelle che usavo prima funziona correttamente...
se funziona usala ;D ;D
ciao,
marco
-
si
ult'imissima cosa...se un valore viene riportato cosi: 1015,3435436786 ed io volessi visualizzarlo cosi:1015,3 come devo fare ? agire sempre sulla query?
-
secondo me è sbagliato usare le funzioni di formattazione del sql, a meno che non debba essere il sql a gestire l'output formattato; in tutti gli altri casi conviene lasciare che sia restituito il tipo specifico del dato, anziché una stringa, che poi sarà formattato come meglio si ritiene:
<?php printf("%01.1f", $value); ?>
analogo discorso si applica alle date....
-
grazie mille sei stato di un aiuto incredibile...intanto metto risolto.