ordre sql compliqué

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 : ordre sql compliqué

par Invité » 15 mars 2007, 17:34

Merci j'étais déjà dessus.En fait j'ai enlevé la close where et ça marche bien entendu ça me renvoi tous les noms, prenoms et classes sans sélectionner dans la plage des âges.
Mon problème c'est donc l'utilisation de between.
Merci encore.

par titerm » 15 mars 2007, 16:05

par acatmp » 15 mars 2007, 15:50

merci,
j'attends donc les pros de mysql.

par titerm » 15 mars 2007, 15:44

Je laisserai les pro mysql confirmer mais sous oracle, tu ne peut pas utiliser une fonction qui prend une date en input et lui mettre du varchar2, sauf si tu converti avec un todate() avant.
En meme temps sous oracle, un champs date est vu comme un nombre de jour, donc tu peux faire des comparaison de date a date directement et faire date + 7 poru avoir la date augmenter d'une semaine.

par acatmp » 15 mars 2007, 15:37

j'ai essayé de mettre ces côtes mais rien à faire j'ai toujours cette erreur.
Est ce que dans la BDD le champ date_naissance doit être absolument de type date ? car je l'ai en type varchar mais les données sont enregistrées
sous forme "YYYY-mm-dd".
Merci de votre réponse.

par titerm » 15 mars 2007, 15:24

Je mettrai bien des quotes autours des chaines ....En tt cas, sous oracle, faudrai faire ca...

Select nom,prenom,classe,date_naissance,(YEAR('2007-03-15')-YEAR(date_naissance))-(RIGHT('2007-03-14',5) < RIGHT(date_naissance,5)) AS age from matable where age between 18 and 20

par acatmp » 15 mars 2007, 15:16

voilà l'echo de la requête:
Select nom,prenom,classe,date_naissance,(YEAR(2007-03-15)-YEAR(date_naissance))-(RIGHT(2007-03-14,5) < RIGHT(date_naissance,5)) AS age from matable where age between 18 and 20

par titerm » 15 mars 2007, 15:06

Bah si tu nous affichait le resultat du print_r, peut etre qu'on pourrait t'aider et tant que tu ais, ajoute donc un echo $sql qu'on ait un visu de la requete que tu passes

par acatmp » 15 mars 2007, 15:00

Merci de ta réponse,
mais je ne trouve pas encore ou se situe cette erreur dans l'ordre sql ?
pourtant j'ai fait un print($result_r), il n'y a rien qui s'affiche, même pas une érreur.

par titerm » 15 mars 2007, 14:48

Meme reponse, que pour monsieur PDO... quand on appelle une fonction, on test le retour...donc tu fais un print_a($result) et tu vas te rendre compte que ta requete est invalide et que l'erreur se situe en amont

ordre sql compliqué

par acatmp » 15 mars 2007, 14:44

Bonjour,
j'aimerai écrire un ordre sql qui fait des calculs mais je n'y arrive pas. En effet
voilà le principe.
$Table="matable";
mes champs:nom,prenom,date_naissance,classe.
date_naissance est sous la forme "2007-03-15"
Je souhaite avoir le nom,prenom et classe des élèves dont l'âge se situe entre 18 et 20 ans.
J'ai essayé ceci sans succès:

Code : Tout sélectionner

$Table="matable"; $date_actuel=date("Y,m,d"); $age1=18; $age2=20; $sql="Select nom,prenom,classe,date_naissance, (YEAR($date_actuel)-YEAR(date_naissance)) - (RIGHT($date_actuel,5)<RIGHT(date_naissance,5)) AS age FROM $Table where age between $age1 and $age2"; $result=mysql_query($sql); while($leresultat=mysql_fech_array($result)){ $lenom=$leresultat['nom']; $leprenom=$leresultat['prenom']; $laclasse=$leresultat['classe']; echo $lenom."-".$leprenom."-".$laclasse."<br>"; }
L'erreur exacte de cet ordre est:
Warning : mysql_fetch_array():supplied argument is not valid MYSQL result resource in ...........on line 351

Je vous remercie d'avance de votre aide.