Comment faire une division de deux donnée de la BDD?

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 : Comment faire une division de deux donnée de la BDD?

par Patriboom » 13 juil. 2008, 19:42

Il suffit d'ajouter le nombre de décimales souhaité après une virgule comme ceci: round(valeur, nb_décimales)

Ce qui donne:

Code : Tout sélectionner

SELECT id, total_votes AS votes, total_value AS nombre, round( ( total_votes / total_value ), 2 ) AS moyenne FROM `ratings` HAVING moyenne >0 ORDER BY moyenne DESC LIMIT 0 , 30

par Juliendu69 » 13 juil. 2008, 17:12

Oups autant pour moi, pour arrondir, il suffit d'ajouter round devant le chiffre a arrondir.
round(total_value/total_votes) AS moyenne
Merci encore milles fois à tous!

Bon surf à tous...

par Invité » 13 juil. 2008, 15:17

Merci milles fois!
C'est la création d'une colonne virtuelle qu'il me fallait!
 (total_value/total_votes) AS moyenne
Vraiment le top! Merci pour vos réponses! C'était pas sorcier, mais ca m'a bien aidé!
J'aimerais finalement pour que ce topic soi complet, savoir comment arrondir avec 2 chiffres après la virgule car Patriboom tu en parles a un moment mais tu donne l'exemple de la multiplication:
Tu peux aussi faire faire à MySQL les calculs d'arrondissement, de multiplication:

par Patriboom » 13 juil. 2008, 05:25

Très juste.

par Sékiltoyai » 13 juil. 2008, 03:18

Je dirais plutôt HAVING votes>0 parce que la moyenne peut être nulle :)

par Patriboom » 13 juil. 2008, 02:36

On peut aussi limiter les résultats aux seuls jeux qui ont des évaluations:

Code : Tout sélectionner

SELECT id, total_votes AS votes, total_value AS nombre, round((total_votes/total_value)*100) AS moyenne FROM `ratings` HAVING moyenne > 0 ORDER BY moyenne DESC

par Sékiltoyai » 13 juil. 2008, 02:26

Pour le classement sur la moyenne tu peux le faire par ORDER BY…

par Patriboom » 13 juil. 2008, 02:24

Aussi, je ne sais pas pour les experts, mais moi je réserve toujours le champ "id" pour un numéro séquentiel. Ça devient très utile pour faire des liens entre les tables quand tu commences à avoir des bases de données complexes. Puisque tu indiques commencer en la matière, aussi bien prendre de bonne habitudes. Dans le cas de la table présentée, j'aurais un id qui serait un nombre de 1 à xyz et le champ que tu appelles id s'appellerait "nom"

Fais comme tu veux. Le commentaire des experts sera pour moi aussi un apprentissage bien venu.

par Patriboom » 13 juil. 2008, 02:19

Donc je cherche la formule qui me permettrai de diviser "total_votes" par "total_value" et a l'inclure dans mon code php présenté dans mon précédent message...
Ah oui, là c'est beaucoup plus clair.

Il te suffit de faire une requête qui créera une colonne virtuelle qui ressemblera à ceci:

Code : Tout sélectionner

SELECT id, total_votes AS votes, total_value AS nombre, (total_votes/total_value) AS moyenne FROM `ratings`
Tu peux aussi faire faire à MySQL les calculs d'arrondissement, de multiplication:

Code : Tout sélectionner

SELECT id, total_votes AS votes, total_value AS nombre, round((total_votes/total_value)*100) AS moyenne FROM `ratings`
Ensuite, tu récupères ces valeurs comme tout autre champ de la base. Dans l'exemple ci-haut, le champ s'appellera moyenne. Donc tu aurais quelque chose comme ceci:

echo "La moyenne du jeu numero ".$donnees['id']." est de  ".$donnees['moyenne']; 

par Sékiltoyai » 13 juil. 2008, 02:14

Soit dit en passant modéliser une liste d'ip dans un champ longtext, c'est une mauvaise modélisation. Il aurait été préférable de créer une nouvelle table avec un champ contenant l'id du jeu et un champ varchar contenant une ip… Si tu ne le fais pas tu comprendras ta douleur quand tu commenceras à avoir une quantité conséquente de votes…

par Juliendu69 » 13 juil. 2008, 01:34

Voila ce qui apparait quand je fais exporter:

Code : Tout sélectionner

-- -- Structure de la table `ratings` -- CREATE TABLE IF NOT EXISTS `ratings` ( `id` varchar(50) NOT NULL, `total_votes` int(11) NOT NULL default '0', `total_value` int(11) NOT NULL default '0', `used_ips` longtext, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Contenu de la table `ratings` -- INSERT INTO `ratings` (`id`, `total_votes`, `total_value`, `used_ips`) VALUES ('snttris', 0, 0, ''), ('pipemania', 0, 0, ''), ('zookeeper', 0, 0, ''), ('shanghaidynasty', 1, 4, 'a:1:{i:0;s:13:"xx.xx.xxx.xxx";}'), ('superkaka', 1, 3, 'a:1:{i:0;s:13:"xx.xx.xxx.xxx";}'), ('mysteriez', 0, 0, ''), ('bubbletrouble', 1, 5, 'a:1:{i:0;s:13:"xx.xx.xxx.xxx";}'), ('bubbleshooter', 0, 0, ''), ('splatman', 1, 4, 'a:1:{i:0;s:13:"xx.xx.xxx.xxx";}'), ('bistrostars', 1, 5, 'a:1:{i:0;s:13:"xx.xx.xxx.xxx";}'), ('supermarioflash', 1, 5, 'a:1:{i:0;s:13:"xx.xx.xxx.xxx";}'), ('differentpicture', 1, 5, 'a:1:{i:0;s:13:"xx.xx.xxx.xxx');
Voici l'image de ma BDD (j'ai caché les ip):

Image

Chaque fois qu'un visiteur donne une note sur 5, total_vote prend +1 et total_value prend +(sa note / 5)
Ce que je cherche a faire, c'est afficher une liste des jeux du type:

La moyenne du jeu snttris est de X
La moyenne du jeu pipemania est de X
La moyenne du jeu zookeeper est de X
La moyenne du jeu shanghaidynasty est de X


Donc je cherche la formule qui me permettrai de diviser "total_votes" par "total_value" et a l'inclure dans mon code php présenté dans mon précédent message...

J'espère vous avoir donné toutes les infos cette fois! :)

par Patriboom » 12 juil. 2008, 20:02

Ça ne compte pas. Donne-nous la vrai structure, celle que te retourne MySQL quand tu fais "exporter". Tant qu'à y être, que ton export compte aussi quelques enregistrements.

par Juliendu69 » 12 juil. 2008, 11:02

J'ai mis la structure de ma BDD, du moins je l'ai shématisé:

:?

id - votes - notes
1 - 8 - 24
2 - 5 - 17
3 - 9 - 29
etc...

par Patriboom » 12 juil. 2008, 04:22

Il nous faudrait la structure de ta BDD et quelques données pour comprendre et être en mesure de t'aider.

Il y aussi une première étape incontournable, celle du manuel des commandes mysql http://dev.mysql.com/doc/refman/5.0/fr/index.html

Tu trouveras là les informations nécessaires à la réalisation du calcul de moyenne sur une série d'enregistrements http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html

Comment faire une division de deux donnée de la BDD?

par Juliendu69 » 12 juil. 2008, 00:54

Bonjour!
Je suis débutant en php, et je me retrouve face a un problème.
Je voudrais simplement savoir comment afficher le resultat que donne la division de deux données de ma BDD.

Les visiteurs note des jeux (id) avec une note entre 1 et 5.
Ma base de donnée se présente ainsi:

id - votes - notes
1 - 8 - 24
2 - 5 - 17
3 - 9 - 29
etc...

Je veux obtenir le classement des id par "moyenne".
Je cherche donc les formules que je doit mettre aux deux endroits ou j'ai mis X0X0X0X0X0X0:

Code : Tout sélectionner

<?php mysql_connect("xxxxx", "xxxxx", "xxxxx"); mysql_select_db("xxxxx"); $reponse = mysql_query("SELECT * FROM xxxx ORDER BY X0X0X0X0X0X0 DESC LIMIT 0, 5"); while ($donnees = mysql_fetch_array($reponse) ) { echo "La moyenne du jeu numero ".$donnees['id']." est de X0X0X0X0X0X0 "; } mysql_close(); // Déconnexion de MySQL ?>
Merci par avance! Je sais qu'il doit y avoir une utilisation de / mais j'ai passé ma journée a tout essayer sans succès... :roll: