extraire 3 valeurs d'une colonne

Petit nouveau ! | 5 Messages

19 sept. 2010, 19:45

bonjour, je bloque sur une requette.
j'ai 1 table avec date, object et valeur comme champ.
il faut que j'obtienne ceci
"SELECT DATETIME, $data_1, $data_2 FROM(SELECT ts as DATETIME, $data_1, $data_2 from $table WHERE object = '$data_1' or object = '$data_2') as temp
ou $data sont des valeurs d object.

ex :
luminosité=5
temp_ext=25
temp_int=22

j'aurai donc en résultat 5,25,22.
est il possible de faire 1 requete pour obtenir ce résultat ?
Merci d'avance.
Arnaud

ViPHP
AB
ViPHP | 5818 Messages

19 sept. 2010, 21:04

Je comprend pas grand chose, enfin peut-être si tu veux une clause WHERE avec plusieurs valeurs de recherche tu peux utiliser IN

SELECT * FROM t1 WHERE id IN ('$data1','$data2');

Petit nouveau ! | 5 Messages

20 sept. 2010, 19:08

Merci pour ta réponse AB, pas facile d etre clair...
ma table est comme ceci : datetime, object, value ou object peut etre temp_ext, temp_int par exemple

j'ai cette requette a remplacer
$que1 = ("SELECT DATETIME, $data_1, $data_2 FROM(SELECT ts as DATETIME, $data_1, $data_2 from $table WHERE object = '$data_1' or object = '$data_2') as temp WHERE DATETIME $time_1 AND $data_1 IS NOT NULL ORDER BY DATETIME ASC");

j'ai essayé ca avec $data_1 = temp_ext et $data_2=temp_int
$que2 = ("SELECT DATETIME, $data_1 FROM(SELECT ts as DATETIME, value as $data_1 from $table where object = '$data_1') as temp1 WHERE DATETIME $time_1 AND $data_1 IS NOT NULL ");
$que3 = ("SELECT DATETIME, $data_2 FROM(SELECT ts as DATETIME, value as $data_2 from $table where object = '$data_2') as temp2 WHERE DATETIME $time_1 AND $data_2 IS NOT NULL ");
$que1 = "$que2 union $que3 ";

mais ca ne correspond pas au résultat... car je dois avoir en sortie la date puis les 2 valeurs respectives...
je déprime :(.
Merci pour votre aide !
Arnaud

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

22 sept. 2010, 01:46

Pourquoi est-ce si grave d'obtenir plusieurs lignes de résultats ?

Tu obtiens: date - clé - valeur

Ensuite si tu veux afficher ça proprement tu fais ça dans ton code PHP par exemple.

Je pense que c'est typiquement le genre de post où il faudrait une description du but FINAL, en français et sans lien avec la technique, plutôt qu'une pseudo-solution (mal?) commencée que l'on va s'acharner à faire fonctionner. Peut-être qu'il y a plus simple et que tu te casses la tête pour rien :)

Alors, pourquoi faut-il absolument avoir une seule ligne de résultat ?

Petit nouveau ! | 5 Messages

28 sept. 2010, 23:38

salut,
en fait je récupère a gauche a droite pour démarrer, et puis voilo, on arrive a des abérations.
j'ai un installation domotique. Il y a des releves de temperatures de pieces dans la maison, luminosité via 1 centrale météo, états des lumieres, capteurs de présence, ... Tout cela est récolté via (pour ceux qui connaissent) l'open source EIBD. C'est sous linux. 1 autre projet open source (linknx) permet de tout recolter dans 1 BDD. Le pb est que tout est stocké à la queleleue dans la meme table.
donc on a 1 table qui contient la date, l'objet mesuré, puis la valeur mesurée.

De l'autre coté, j'ai récupéré du code qui intégre jpgraph. Il me permet de comparer la courbe de 3 mesures sur le meme graphe, voire de mettre en évidence par ex la temp d'une piece en fonction de la luminosité (ca me permettra par ex d'anticiper et de couper le chauffage si besoin).

pour revenir a la technique, j'ai ceci :
$que2 = ("SELECT DATETIME, $data_1, $data_2, $data_3 FROM(SELECT ts as DATETIME, value as $data_1, null as $data_2, null as $data_3 from $table where object = '$data_1') as temp1 WHERE DATETIME $time_1 AND $data_1 IS NOT NULL ");
$que3 = ("SELECT DATETIME, $data_1, $data_2, $data_3 FROM(SELECT ts as DATETIME, null as $data_1, value as $data_2, null as $data_3 from $table where object = '$data_2') as temp2 WHERE DATETIME $time_1 AND $data_2 IS NOT NULL ");
$que4 = ("SELECT DATETIME, $data_1, $data_2, $data_3 FROM(SELECT ts as DATETIME, null as $data_1, null as $data_2, value as $data_3 from $table where object = '$data_3') as temp3 WHERE DATETIME $time_1 AND $data_3 IS NOT NULL ");
$que1 = "$que2 union $que3 union $que4 ORDER BY DATETIME ASC ";
$sql = mysql_query("$que1") or die("$que1 getmysql2 error");

je ne sais pas si c'est optimum, mais en tout cas ca fonctionne, meme si c'est assez long... Il faut savoir que ma base n'est pas top non plus, j'ai des redondances, bref, j'approche les 900 000 records :(, et pas d'index pour le moment.

je pense qu'il faudrait éclater les datas dans n tables, chacune dédiée au capteur... ou bien 2 tables une avec la liste des capteurs et l'autre les données (avec la clé externe du capteur).
en plus, dans cette table sont mélangées différentes info : temperature, luminosité, etat (on/off), etc...
je suis s ouvert à toute proposition.
Merci en tout cas pour votre participation.
Aranud