IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

probleme avec un SELECT


Sujet :

MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Points : 36
    Points
    36
    Par défaut probleme avec un SELECT
    Salut a tous,
    J'ai un petit probleme avec un SELECT que j'arrive pas trop a comprendre :
    1) j'ai cette table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE `tbl_immeubles` (
    `id_immeubles` int(10) unsigned NOT NULL auto_increment,
    `ref` varchar(25) collate latin1_general_ci NOT NULL default '',
    `id_lieu` tinyint(255) unsigned NOT NULL default '0',
    `id_cat` tinyint(255) unsigned NOT NULL default '0',
    `prix` decimal(11,2) unsigned NOT NULL default '0.00',
    `descriptif` text collate latin1_general_ci NOT NULL,
    `titre` varchar(100) collate latin1_general_ci NOT NULL default '',
    PRIMARY KEY (`id_immeubles`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=119 ;
    2) j'ai une variable que je recupere en php par $_GET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(isset($_GET['ref']))  $ref=$_GET['ref'];
    else $ref="";
    3) et ce SELECT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select= 'SELECT t1.ref, t1.id_lieu, t1.prix, t1.descriptif, t1.titre, t2.id_lieu, t2.lieu FROM tbl_immeubles AS t1, tbl_lieu AS t2 WHERE t1.id_lieu = t2.id_lieu AND t1.ref='.$ref ;
    le probleme: tant que $ref renvoie une valeur numerique ca fonctionne tres bien, mais des que, par exemple $ref=PAJ, j'ai une erreur SQL qui me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur : Unknown column 'PAJ' in 'where clause'
    j'ai bien essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t1.ref, etc... AND CONCAT(t1.ref) ='.$ref;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(isset($_GET['ref'])) $ref=strval($_GET['ref']);
    else $ref="";
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t1.ref,.... etc .....AND CONCAT(t1.ref) ='.strval($ref);
    mais ca marche pas non plus (meme erreur)

    pour l'instant je tourne en local avec easy php 1.8 (MySQL 4.1.9), j'avais fait plein de test hier soir (malheureusement que sur des nombres) ca passait nickel, je finis mon code php tout a l'heure, et en fignolant le html avant l'upload, j'essaie avec une reference alpha... patatra ca passe pas ...
    quelqu'un a une idée svp ?
    merci d'avance

  2. #2
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    Ca fait presque 7 heures que je me penche la dessus et je viens de trouver la reponse

    Il manque les guillemets
    il fallait ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ...... AND t1.ref = "'.$ref.'"' ;
    Par contre , en cherchant des infos dans le manuel SQL je suis tombé sur la fonction FORMAT(X,D) , qui m'interesse pour le champ t1.prix, mais je ne sais pas sur de bien l'utiliser dans mon select :
    apres quelques essais, la requete fonctionne avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t1.ref, t1.id_lieu, FORMAT(t1.prix,2) AS prix, t1.descriptif, t1.titre, t2.id_lieu, t2.lieu FROM tbl_immeubles AS t1, tbl_lieu AS t2 WHERE t1.id_lieu = t2.id_lieu AND t1.ref = "'.$ref.'"' ;
    est ce correct ? et d'une maniere generale peut on ameliorer ou optimiser la requete ?
    Merci
    @+

  3. #3
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    On peut certainement améliorer la requête en recourant à une jointure plutôt qu'à une clause WHERE, quant au formatage par SQL, ce n'est pas non plus son rôle, number_format() en php le fera tout aussi bien.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Maljuna Kris
    Saluton,
    On peut certainement améliorer la requête en recourant à une jointure plutôt qu'à une clause WHERE, quant au formatage par SQL, ce n'est pas non plus son rôle, number_format() en php le fera tout aussi bien.
    Salut,

    Initialement il y avait une jointure (je suis debutant et c'est avec NATURAL LEFT JOIN que j'avais appris a relier des tables, dans une excellente FAQ sur les SGBDR ou d'un coup tout me semblait evident, mais le site n'existe plus www.en2i.org ) mais sur un autre forum on me la deconseillé , et vu mon niveau (sans experience) j'ai suivi cet avis quand bien meme LEFT JOIN me semblait personnellement plus "naturel" ...
    maintenant, j'aimerai bien un peu comprendre le pourquoi du comment, cad dans le cas d'une simple relation avec 2/3 tables pourquoi quoi une jointure est preferable a une clause WHERE ( ou vice versa) ? performance? fiabilité? securité ? evolutivité? autre ?
    c'est d'ailleurs un peu pareil pour FORMAT, hier soir je lisais une FAQ MySQL ou ils preconisent l'emploi des fonctions offertes par MySQL plutot que des lignes de code en PHP ... ; dans le cas present, ca me semble plus evident (+ simple et rapide) de formater directement ma variable depuis SQL , que de recuperer cette variable brut pour redemander à PHP de la formater en plus de tout le boulot que je lui demande de faire par ailleurs (c'est simpliste je sais mais c'est la reflexion d'un novice )
    Alors si toi ou l'un d'entre vous a quelques instant a me consacrer pour m'expliquer ce "pourquoi du comment", je suis toute ouïe

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par Jean Fi
    maintenant, j'aimerai bien un peu comprendre le pourquoi du comment, cad dans le cas d'une simple relation avec 2/3 tables pourquoi quoi une jointure est preferable a une clause WHERE ( ou vice versa) ? performance? fiabilité? securité ? evolutivité? autre ?
    Plusieurs raisons à cela:
    1) On distingue facilement les conditions liées aux jointures des conditions de restriction du WHERE
    2) On connait explicitement le type de jointure (INNER, LEFT OUTER, NATURAL...)
    3) MySQL fait des optimisations sur les jointures en se basant sur les conditions de jointures. Si pas, c'est peut-être prévu dans une version future


    Citation Envoyé par Jean Fi
    c'est d'ailleurs un peu pareil pour FORMAT, hier soir je lisais une FAQ MySQL ou ils preconisent l'emploi des fonctions offertes par MySQL plutot que des lignes de code en PHP ...
    Il faut voir au cas par cas. Une fois, j'essayais de faire la différence entre deux UNIX_TIMESTAMP en MySQL (version 4.0, donc pas de TIMESTAMP_DIFF...) mais j'avais une erreur d'entiers signés/non signés, donc j'ai finalement fait une partie du traitement en PHP.

    Dans d'autres cas, les fonctions de convertion de MySQL sont bien utiles. Après tout, ça ne sert à rien de décomposer un résultat pour le réarranger différemment alors qu'on peut faire l'opération directement.

    Après, ça dépend d'autres facteurs, mais sinon, va au plus simple (ça évite les erreurs) et surtout au plus sûr.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    8) 8) 8)
    Merci a toi pour ces precisions; c'est exactement ce que je cherche => la simplicité !
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec fonction SELECT FROM WHERE
    Par tatann22 dans le forum Langage
    Réponses: 5
    Dernier message: 27/03/2009, 01h01
  2. probleme avec le select
    Par verdi-verda dans le forum Hibernate
    Réponses: 13
    Dernier message: 28/08/2008, 13h38
  3. probleme avec new->select a wizard
    Par thesorrow dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 12/03/2007, 09h00
  4. [My SQL]probleme avec insert select
    Par jmjmjm dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/01/2007, 11h24
  5. problem avec un select sous IE?
    Par Death83 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/12/2005, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo