SELECT avec des conditions

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 : SELECT avec des conditions

par lord.anonymous » 30 mars 2006, 18:25

Bon j'ai fait 2 tables distinctes, une qui garde la dernière valeur à jour, (donc qui prend très peu de place puisqu'on ne fait qu'updater les données), et une autre qui servira d'historique. Peu de redondances de données puisque ça va concerner environ 80 lignes dans une table en "superflu".
Je pense qu'on peut mettre [résolu] même si la question n'a pas été traitée dans le fond, et que le problème a été contourné.

par ouckileou » 29 mars 2006, 17:27

Je vais partir sur 2 tables séparées: une qui contient les données mises à jour et uniquement elles, et une deuxième table qui contiendra l'historique complet. Cette seconde table ne servira pas à la lecture puisqu'en consultation les seules choses qui nous intéressent ce sont les dernières valeurs à jour. Par contre j'avais besoin d'un historique afin de pouvoir pister les modifications en cas de "phénomène étrange"...
A ce moment là pourquoi ne pas mettre en place ma suggestion précédente : une colonne "dernière_maj", en séparant Outils et MàJ

ça revient plus ou moins au même, sauf que tu évites la redondance des données et tu gagnes de la place ;)

par ouckileou » 29 mars 2006, 17:22

Il n'existe pas une fonction INTERSECTION au lieu de UNION qui pourrait m'aider à faire ce genre de requête?
Je ne vois pas ce que ça vient faire ici, puisque de toute façon tu n'as qu'une seule table

Mais même avec 2 tables
Union : tu récupèrerais toutes les lignes des 2 tables
Intersection : tu récupèrerais toutes les lignes en commun

Toi il te faudrait une jointure, sur numéro Outil, avec une condition pour ne garder que la date maxi à chaque fois
Et là comme ça je ne vois pas comment faire désolé

par lord.anonymous » 29 mars 2006, 17:20

Je vais partir sur 2 tables séparées: une qui contient les données mises à jour et uniquement elles, et une deuxième table qui contiendra l'historique complet. Cette seconde table ne servira pas à la lecture puisqu'en consultation les seules choses qui nous intéressent ce sont les dernières valeurs à jour. Par contre j'avais besoin d'un historique afin de pouvoir pister les modifications en cas de "phénomène étrange"...

par lord.anonymous » 29 mars 2006, 17:11

Il n'existe pas une fonction INTERSECTION au lieu de UNION qui pourrait m'aider à faire ce genre de requête?

par Truc » 29 mars 2006, 17:09

Effectivement je n'ai pas répondu à la question... que j'vais mal comprise :wink:

Le traitement par programmation semble inévitable, soit ça soit modification de la structure.

par ouckileou » 29 mars 2006, 16:46

Avec tout stocké dans une même table, non je ne pense pas

Tu aurais séparé Outils et Mises à jour peut-être, et encore je ne sais pas comment, si ce n'est en rajoutant une colonne "date_maj" dans ta table "Outils"
Tu aurais comme ça une table recensant les diverses modifications de config, à chaque insertion tu mettrais à jour "date_maj" dans Outils
ce qui te permettrait de relier dans ta requête de sélection les deux tables sur le numéro d'outil et sur la date

A part ça je ne vois pas trop là

par lord.anonymous » 29 mars 2006, 16:41

Je peux faire comme cela, j'y avais pensé, mais est-ce possible de contruire une requête qui me permettrait de le faire?

par ouckileou » 29 mars 2006, 16:20

Oui je le sais, mais des commentaires qui peuvent être pris pour de l'impatience ne vont pas t'aider à avoir des réponses

Code : Tout sélectionner

SELECT `id`, `machine`, `outil`, `X`, `Z`, `R`, `C`, `edit`, `date_heure`, `image` FROM `outils` WHERE `machine`='CH40' ORDER BY `outil`, date_heure DESC
Te renvoie tes infos triées par outil puis par date

Si tu ne veux n'afficher que le plus récent, tu peux ensuite gérer ça dans le code
Pour le premier outil, et ensuite dès que tu changes, tu affiches la ligne correspondante

Code : Tout sélectionner

outilCourant <- VIDE TantQue il reste des lignes de résultat Faire Si outilCourant est VIDE ou si outilLigne est différent de outilCourant Alors outilCourant <- outilLigne afficher infos FSi FTantQue

par lord.anonymous » 29 mars 2006, 16:07

Help!
ça fait une 1h30 que tu as posté ton premier messsage, ce n'est pas la mort, ne sois pas impatient

Il y a des gens qui travaillent aussi :roll:
Bah tu dois savoir comme moi qu'il est énervant de sécher un certain temps sur une question et de bloquer ainsi tout l'avancement d'un projet...
Je n'en veux à personne de ne pas intervenir, mais je tourne en rond dans ce problème et ça m'obsède.

par ouckileou » 29 mars 2006, 16:05

Help!
ça fait une 1h30 que tu as posté ton premier messsage, ce n'est pas la mort, ne sois pas impatient

Il y a des gens qui travaillent aussi :roll:

par lord.anonymous » 29 mars 2006, 16:02

Help!

par lord.anonymous » 29 mars 2006, 15:22

Personne n'a un idée? Je sèche là dessus depuis quelques heures.

par lord.anonymous » 29 mars 2006, 14:49

Salut!
Merci pour ta réponse.
Ceci fonctionne dans le cas où il y a 2 outils, mais c'était un "cas d'école".
J'en ai 40 dans cette machine.
Je veux bien mettre la limite à 40... mais je crois que ça ne change pas le fond de mon problème.

Je réexplique:
- pour une machine donnée, je veux récupérer la dernière valeur enregistrée des caractéristiques d'un outil, sachant que ça s'affichera dans un tableau de la machine, où seront affichés tous les outils avec les valeurs à jour.

par Truc » 29 mars 2006, 14:43

Salut,

Si j'ai bien suivi tu veux récupérer les 2 dernier tuples (lignes de données) pour une machine donnée.

Proposition:
Classeement dans l'ordre décroissant et séléction de 2 tuples
SELECT `id`, `machine`, `outil`, `X`, `Z`, `R`, `C`, `edit`, `date_heure`, `image` FROM `outils` WHERE `machine`='CH40' ORDER BY `id` DESC ,`outil` LIMIT 0 , 2