billcom Posté 22 Juillet 2013 Partager Posté 22 Juillet 2013 Bonjour le hub, J'aurai besoin d'un coup de pouce concernant une requette MYSQL. Plantons le décor. J'ai le tableau suivante : id - Colone A - Colone B 1 10 30 2 10 35 3 15 20 4 20 10 5 20 35 6 20 15 Va = valeur colonea Vb = valeur coloneb J'aimerai récupérer l'id de l'enregistrement ayant une Va > 18 et une Vb > 11 et ayant la paire de valeur la plus proche de ma recherche. ce serai donc l'id 6 avec Va = 20 et Vb = 11 Or je n'arrive pas à ressortir uniquement la ligne contenant les valeur minimums je ressorts toujours 2 lignes minimum dans le cas présent #5 et #6 Merci pour votre aide Anthony Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dadou Posté 23 Juillet 2013 Partager Posté 23 Juillet 2013 select * from table where Va>18 and Vb>11 order by Va, Vb limit 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
billcom Posté 23 Juillet 2013 Auteur Partager Posté 23 Juillet 2013 (modifié) Je n'ai pas accès à ma base pour le moment mais effectivement ça me semble logique. Je partais sur des trucs tordu dans tous les sens probablement lié aux 14h de dev de la journée x) je te fais un retour dès que j'ai eu l'occasion de tester ça En tout cas merci pour ton aide ! Modifié 23 Juillet 2013 par billcom Lien vers le commentaire Partager sur d’autres sites More sharing options...
SStephane Posté 23 Juillet 2013 Partager Posté 23 Juillet 2013 SELECT id, (va -18 + vb -11) AS total FROM `table` WHERE va >18 AND vb >11 AND (va -18 + vb -11) IN ( SELECT MIN( va -18 + vb -11 ) FROM `table` WHERE va >18 AND vb >11 ) Sinon t'auras une erreur si l'écart d'un vb est supérieur à l'écart d'un va. Tu peux avoir pls réponses dans le cas d'une égalité de total, tu peux ajouter un limit 1 (ex dasn ton cas : va=19 et vb=16). Lien vers le commentaire Partager sur d’autres sites More sharing options...
billcom Posté 23 Juillet 2013 Auteur Partager Posté 23 Juillet 2013 (modifié) Merci SStephane pour ton aide également je découvre ce type de requete pour la première fois à quoi sers le (va -18 + vb -11) AS total Anthony Modifié 23 Juillet 2013 par billcom Lien vers le commentaire Partager sur d’autres sites More sharing options...
SStephane Posté 23 Juillet 2013 Partager Posté 23 Juillet 2013 va-18+vb-11 = le résultat sera la proximité globale de ta requête. Plus total est proche de 0, plus tu auras un compte approchant Lien vers le commentaire Partager sur d’autres sites More sharing options...
billcom Posté 23 Juillet 2013 Auteur Partager Posté 23 Juillet 2013 Ok merci pour l'info Dès que je peux tester je vous fait signe Lien vers le commentaire Partager sur d’autres sites More sharing options...
jcaron Posté 24 Juillet 2013 Partager Posté 24 Juillet 2013 La première chose à faire, c'est de déterminer ce que tu veux dire par "plus proche de". En gros, il faut que tu définisses comment tu calcules la "distance". Ça peut simplement être la somme des deux écarts, ou ça peut être quelque chose de plus compliqué (par exemple la somme des carrés des écarts), tout dépend de l'application. En considérant que tu utilises la somme des écarts: SELECT * FROM table WHERE va > ? AND vb > ? ORDER BY (va - ? + vb - ?) LIMIT 1 devrait suffire. Jacques. Lien vers le commentaire Partager sur d’autres sites More sharing options...
billcom Posté 29 Juillet 2013 Auteur Partager Posté 29 Juillet 2013 Bonjour, Merci pour vos aides et vos explications j'ai découvert qu'on pouvait faire des order by sur des opérations grace à vous . Finalement mon problème n'était pas si complexe il me suffisait de prendre un peu de recul et la réponse proposé par Dadou me permet d'obtenir le bon résultat. J'ai pas encore assez de données pour faire une batteries de test mais ça semble être la bonne solution. Anthony Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant