group by qui ne donne pas les derniers enregistrement

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : group by qui ne donne pas les derniers enregistrement

Re: group by qui ne donne pas les derniers enregistrement

par laul » 06 mars 2014, 12:43

mais je me demandé si y'avais pas plus simple pour afficher les derniers enregistrement groupé comme je le voudrais

Re: group by qui ne donne pas les derniers enregistrement

par laul » 06 mars 2014, 12:39

salut moogli, je n'ai aucun message d'erreurs,

voici le resultat de l'explain


id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY s ALL NULL NULL NULL NULL 3257 Using where
1 PRIMARY m ALL NULL NULL NULL NULL 5
1 PRIMARY u ALL NULL NULL NULL NULL 6
1 PRIMARY t ALL NULL NULL NULL NULL 7
2 DEPENDENT SUBQUERY domotic_sensor ALL NULL NULL NULL NULL 3257 Using temporary; Using filesort

Re: group by qui ne donne pas les derniers enregistrement

par moogli » 06 mars 2014, 12:36

salut,

as tu des messages d'erreurs ?

as tu utiliser explain pour voir où se trouve les goulets qui ralentisse ta requête ?

@+

group by qui ne donne pas les derniers enregistrement

par laul » 06 mars 2014, 12:21

Bonjour,

depuis le début de la semaine, je lutte avec une requête, voici la table :
CREATE TABLE IF NOT EXISTS `domotic_sensor` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `module_id` int(11) NOT NULL,
  `sonde_type` int(10) NOT NULL,
  `sonde_valeur` decimal(10,2) NOT NULL,
  `sonde_unit` int(11) NOT NULL,
  `valeur_temp` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3132 ;
j'ai trouvé une requete qui fonctionne mais sature le server mysql en s'exécutant
SELECT  s.id, s.sonde_valeur, s.sonde_unit, s.sonde_type, s.module_id, s.valeur_temp AS date, m.module_nom, m.module_type, m.module_ref, m.module_emplacement , u.symbole, u.nom, u.nom_lien, t.type_id, t.nom AS nom_sensor FROM domotic_sensor AS s 
LEFT JOIN domotic_sensor_module AS m ON s.module_id = m.module_ref 
LEFT JOIN sensor_unit AS u ON s.sonde_unit = u.unit_id
LEFT JOIN sensor_type AS t ON s.sonde_type = t.type_id 
WHERE s.valeur_temp in (select max(valeur_temp) from domotic_sensor GROUP BY module_id, sonde_unit, sonde_type)
AND TO_DAYS(NOW()) - TO_DAYS(s.valeur_temp) < '1' 
Affichage des lignes 0 - 13 ( 14 total, Traitement en 171.7634 sec)
Image
lorsque je fais une requete simple genre
SELECT s . * , MAX( valeur_temp ) 
FROM domotic_sensor AS s
GROUP BY module_id, sonde_unit, sonde_type
LIMIT 0 , 30
je n'ai pas les derniers enregistrements, il m'affiche les première ligne de la table.
Image

merci de votre aide :priere: