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

Requêtes MySQL Discussion :

Syntaxe et optimisation de requête


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Profil pro
    Développeur multimédia
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut Syntaxe et optimisation de requête
    Bonjour à toutes et à tous.

    Voila, suite à un formulaire, je dois effectuer une recherche dans ma base.

    Tout d'abord, le principe que j'ai mis en place est assez fastidieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $sql = "SELECT * FROM " . $table;
    if (($TTypeBien!="toutes"))
    {
    	$sql = $sql .  " WHERE type='" . $TTypeBien . "'";
    }
    else $sql = $sql . " WHERE type!='" . $TTypeBien . "'";
    if (($TSurfMin!="")&&($TSurfMin!=""))
    	$sql = $sql . " AND 'surface' BETWEEN " . $TSurfMin . " AND " . $TSurfMax;
    if (($TPrixMin!="")&&($TPrixMax!=""))
    	$sql = $sql . " AND 'prix' BETWEEN (". $TPrixMin . " AND " . $TPrixMax . ")";
    	//WHERE prix BETWEEN (" . $TPrixMin . " AND " . $TPrixMax .") ";
    if (($TVille!="toutes"))
    	$sql = $sql . " AND ville='" . $TVille."'";
    if ($cbBalconTerrase=="on")
    	$sql = $sql . " AND (balcon='1' OR terrasse='1')";
    if ($cbCaveGrenier=="on")
    	$sql = $sql . " AND (cave='1' OR grenier='1')";
    if ($cbAscenseur=="on")
    	$sql = $sql . " AND (ascenseur='1')";
    if ($cbParkingGarage=="on")
    	$sql = $sql . " AND (parking='1' OR garage='1')";
    if ($cbInterphone=="on")
    	$sql = $sql . " AND (interphone='1')";
    $sql = $sql . " ORDER BY reference";
    Comme vous pouvez le voir, c'est assez primaire comme solution.

    De plus, mes requête de recherche par "encadrement de valeur" ne fonctionnent pas.
    Dans cette exemple, je devrai avoir un retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ic_bienavendre WHERE type!='toutes' AND 'prix' BETWEEN (175000 AND 178000) ORDER BY reference
    Est-ce que quelqu'un pourrai m'aider à optimiser ma "construction de requête, mais surtout, me dire où ma syntaxe ne fonctionne pas?

    Merci d'avance. Bonne continuation à tous

  2. #2
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    Citation Envoyé par benbax Voir le message
    Dans cette exemple, je devrai avoir un retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ic_bienavendre WHERE type!='toutes' AND 'prix' BETWEEN (175000 AND 178000) ORDER BY reference
    Est-ce que quelqu'un pourrai m'aider à optimiser ma "construction de requête, mais surtout, me dire où ma syntaxe ne fonctionne pas?

    Merci d'avance. Bonne continuation à tous
    ta syntaxe est mauvaise, différent ne s'écrit pas != en sql mais <> différent de

    ensuite as tu un message d'erreur? si oui est il possible de le voir

    enfin si prix est un champs, pourquoi le mettre entre ' ', il n'est pas reconnu ton champ prix pour ta délimitation dans ce cas.

    (mettre des requetes dans des variables est plus plaisant et pratique)
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  3. #3
    Membre averti
    Profil pro
    Développeur multimédia
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    Je n'ai pas de message d'erreur, de quelle manière puis-je l'avoir?

  4. #4
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    Citation Envoyé par benbax Voir le message
    Je n'ai pas de message d'erreur, de quelle manière puis-je l'avoir?

    pour toutes tes requetes, il suffit de les tester auparavant dans ton SGBD soit directement sur MySQL si elle passe avec des valeurs en exemple, la syntaxe est bonne et tu peux la généraliser en mettant des valeurs à récuperer sur un forumulaire par exemple à la place.

    Ta syntaxe n'est pas juste donc la tu auras ton beau message d'erreur
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  5. #5
    Membre averti
    Profil pro
    Développeur multimédia
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    Mon "beau" message d'erreur... lol

    Je regarde, et je te dis. Merci de répondre si vite

  6. #6
    Membre averti
    Profil pro
    Développeur multimédia
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    Voici le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY reference  LIMIT 0, 30' at line 1
    Au passage, j'ai apporté la modif sur "!=". J'ai mis <> à la place.
    Requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ic_bienavendre WHERE type<>'toutes' AND 'prix' BETWEEN (175000 AND 178000) ORDER BY reference

  7. #7
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    Citation Envoyé par benbax Voir le message
    Voici le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY reference  LIMIT 0, 30' at line 1
    Au passage, j'ai apporté la modif sur "!=". J'ai mis <> à la place.
    Requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ic_bienavendre WHERE type<>'toutes' AND 'prix' BETWEEN (175000 AND 178000) ORDER BY reference
    et bien le message est explicite tu ne peux pas utiliser ton order by avec ta version ou bien il faut modifier la syntaxe
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  8. #8
    Membre averti
    Profil pro
    Développeur multimédia
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    Alors, j'ai déjà essayé cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ic_bienavendre WHERE type<>'toutes' AND 'prix' BETWEEN (175000 AND 178000) ORDER BY reference LIMIT 0, 30
    Ca ne change rien :/

    Etes vous sûr que la syntaxe de l'encadrement de valeur est bonne?

  9. #9
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    Citation Envoyé par benbax Voir le message
    Alors, j'ai déjà essayé cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ic_bienavendre WHERE type<>'toutes' AND 'prix' BETWEEN (175000 AND 178000) ORDER BY reference LIMIT 0, 30
    Ca ne change rien :/

    Etes vous sûr que la syntaxe de l'encadrement de valeur est bonne?
    non elle est fausse comme je l'ai dit précédemment, prix n'a pas à etre entre ' ' si c'est un champs comme bien entendu c'est un champ qui doit etre spécifier pour un between.

    de meme un espace entre type et <> serait préférable.
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  10. #10
    Membre averti
    Profil pro
    Développeur multimédia
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    MErci beaucoup, le probleme est résolu.
    Voici ma syntaxe finale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ic_bienavendre WHERE type <> 'toutes' AND prix BETWEEN 175 AND 200000 ORDER BY reference LIMIT 0, 30
    Par ailleurs, désolé, ce qui ne marchais pas, c'etait le prix entre '... Je n'avais pas vu que je devais le modifier.

    Merci de ton aide =)

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

Discussions similaires

  1. Optimisation de requête avec Tkprof
    Par stingrayjo dans le forum Oracle
    Réponses: 3
    Dernier message: 04/07/2005, 10h50
  2. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 21h55
  3. optimisation des requêtes
    Par yech dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/09/2004, 20h03
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 12h54
  5. Optimisation de requête
    Par olivierN dans le forum SQL
    Réponses: 10
    Dernier message: 16/12/2003, 11h09

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