[Mysql] Operation entre resultat d'une requete DANS une requete

Operation entre resultat d'une requete DANS une requete [Mysql] - SQL/NoSQL - Programmation

Marsh Posté le 10-10-2006 à 15:39:03    

Hello !
 
J'ai besoin dans une requete assez simple a la base de pouvoir faire un division entre deux champs de mon select  :heink:  
 
En gros ma requete ressemble a cela :
 

Code :
  1. SELECT commentaire_id, commentaire_desc, commentaire_nb_note, commentaire_nb_note_ok FROM commentaire


 
J'aurais besoin dans ma requete de classer les resultats en fonction du ratio ( commentaire_nb_note_ok / commentaire_nb_note )
 
PS: dans la requete réelle, nb_note et nb_note_ok sont des alias de champs calculés (SUM() )
 
Merci d'avance  :jap:  
folk

Reply

Marsh Posté le 10-10-2006 à 15:39:03   

Reply

Marsh Posté le 10-10-2006 à 15:59:41    

bin tu fais:

Code :
  1. commentaire_nb_note / commentaire_nb_note_ok


ou alors j'ai pas compris la question [:w3c compliant][:w3c compliant][:w3c compliant]

Reply

Marsh Posté le 10-10-2006 à 16:03:02    

dans mon select ?
 
bah il aime pas trop
 
PS: a mon avis c'est parcque ce sont des alias

Reply

Marsh Posté le 10-10-2006 à 16:03:11    

Citation :

GROUP BY commentaire_nb_note_ok / commentaire_nb_note

? :whistle:  
Et le mieux c'est que ca marche même sur des champs calculé comme tu dis avoir.

Reply

Marsh Posté le 10-10-2006 à 16:04:01    

GROUP BY ? :p
 
ORDER BY alias1 / alias2
 
=> Erreur SQL

Reply

Marsh Posté le 10-10-2006 à 16:04:42    

Ben c'est quoi alors le message d'erreur et le texte exact de la requette?

Reply

Marsh Posté le 10-10-2006 à 16:07:58    

FLK a écrit :

dans mon select ?
 
bah il aime pas trop
 
PS: a mon avis c'est parcque ce sont des alias


Bin mets pas les alias mais les "vrais" trucs:

Code :
  1. select sum(champs1)/sum(champs2), ... from tatable order by sum(champs1)/sum(champs2)


Note: je te conseille de tester que ton sum(champs2) est différent de 0 et de null pour pas avoir de surprise!

Reply

Marsh Posté le 10-10-2006 à 16:09:54    

Code :
  1. SELECT *, c.commentaire_id, COUNT(commentaire_note_id) AS nb_notes, IF(SUM(commentaire_note_ok) IS NULL,0,SUM(commentaire_note_ok)) AS nb_notes_ok
  2. FROM commentaire c, user u
  3. LEFT JOIN commentaire_note cn ON (c.commentaire_id=cn.commentaire_id)
  4. LEFT JOIN produit p ON (p.produit_id=c.produit_id)
  5. WHERE c.user_id = u.user_id
  6. AND p.produit_nom_url = 'blablablablabla'
  7. AND c.langue_id = '1'
  8. GROUP BY c.commentaire_id
  9. ORDER BY c.commentaire_id


 
Voila la requete de base qui fonctionne bien.
 
J'aimerais pouvoir trier par ( nb_notes_ok / nb_notes )
 
J'ai essayé ORDER BY nb_notes_ok / nb_notes
=> #1054 - Unknown column 'nb_notes_ok' in 'order clause'  

Reply

Marsh Posté le 10-10-2006 à 16:16:39    

Si l'alias ne marche pas (bizare, il me semble que ca marche avec mysql5) essaye en mettant l'expression correspondante. Soit le "IF(SUM(commentaire_note_ok) IS NULL,0,SUM(commentaire_note_ok)) " pour la colonne "nb_notes_ok".

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed