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 :

néophyte, faire une requête plus courte


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut néophyte, faire une requête plus courte
    Bonjour à tous,

    Question néophyte mais bon ....

    Si j'ai une requête comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM table WHERE (CHAMPS1='val1' OR CHAMPS1='val2' OR CHAMPS1='val3')
    Je ne peut pas l'écrire comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM table WHERE (CHAMPS1='val1' OR 'val2' OR 'val3')
    Enfin, je sais que je peux pas l'écrire comme ça, mais comment faire pour ne pas répéter toujours CHAMPS1, écrire une requêtre plus courte en somme.

    Merci d'avance pour vos réponses !!

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...where CHAMPS1 IN (.........)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Merci pour ta réponse qi130.
    Une dernière question.

    Est-il possible de mettre directement un tableau dans la requête ?

    Je veux dire (tableau perl)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .... where CHAMPS1 IN (@tab)
    ???

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Je ne suis pas familier avec Perl

    Du coup, soit tu fais un test, soit tu fais un détour par le forum PERL

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Oui pardon , j'ai fait un détour par mes amis perliens qui m'ont filé un bon tuyau avec la fonction join().

    Ceci dit c'est avec la syntaxe mysql que je galère le plus à vrai dire

    J'ai donc la requète suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM trrcvdoc WHERE AND NUM_MESSAGE in ('206337-002','208259-025','208349-013','208674-012','210514-001','211238-016','5758-029','001-274733','208113-021','212258-003','1726-034','206413-028','207753-014','207811-020','208267-026','208382-025','208892-018','211058-023','206520-028','207090-022','207874-014','208416-026','209056-018','211238-023','5034-030','1108489','010545505','209025-012','210872-001','211561-016','6202-029','001-275913','209123-006','212687-003','207482-007','207831-015','207358-010','208285-017','210965-001','212564-009','214974-008')

    Qui me produit l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #1064 - Erreur de syntaxe près de 'AND NUM_MESSAGE in ('206337-002','208259-025','208349-013','2086'  ligne 1

    Peux tu m'éclairer la dessus. J'ai regardé la faq sur SQL concernant l'opérateur IN et je en vois pas où je fais l'erreur

  6. #6
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Il y a une erreur de syntaxe SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...WHERE AND NUM_MESSAGE in...
    soit il manque qq chose avant le AND
    soit le AND est en trop.

  7. #7
    Membre habitué Avatar de Orionmel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2004
    Messages : 174
    Points : 185
    Points
    185
    Par défaut
    Oui le and (ou or) est situé après la première condition du where et précéde chacunes des instructions suivantes.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Oulala, quel idiot !!!
    J'étais tellement sur que l'erreur venait de ce qu'il y avait dans mon IN que je n'ai même pas regardé la syntaxe de ma requête

    Merci pour la correction.

    Mais ceci dit, je pense bien que j'ai une erreur dans ma requête au niveau de IN:

    en enlevant le AND superflu, j'ai la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT * 
    FROM trrcvdoc
    WHERE NUM_MESSAGE
    IN (
    '0251730', '0251705', '002-148053', '1210-035', '207826-028', '209991-026', '210674-018', '213447-023', '010546408', '210123-013', '210760-012', '212742-001', '213385-016', '7732-029', '0251929', '001-283752', '001-283774', '209183-015', '210192-005', '210736-006', '214913-003', '2514-033', '6331-030', '0251966', '208614-022', '212193-024', '215551-004', '001-283914', '010922450', '010922559', '0252139', '209456-020', '212858-001', '213511-016', '214805-009', '217725-008', '5663-031', '001-284076', '0252156', '0252245', '207958-028', '208697-010', '209665-017', '210181-026', '210852-018', '213667-023', '3109-034', '001-284334', '1114557', '001-284381', '010546581', '207877-002', '209945-021', '210689-025', '210915-012', '212931-001', '213592-016', '0252424', '207979-027', '209332-015', '209501-014', '210346-005', '210891-006', '215151-003', '001-284570', '0252452', '208712-022', '209015-011', '209053-007', '212355-024', '215758-004', '010929040', '209764-017', '213036-001', '215004-009', '217942-008', '5805-031', '001-284815', '0252685', '210335-026', '211022-018', '213862-023', '0252770', '011003176', '210086-021', '210417-013', '210812-025', '211127-012', '213104-001', '213758-016', '8172-029', '0252834', '0252900', '209447-015', '209621-014', '210489-005', '211044-006', '215357-003', '212544-024', '216004-004', '001-285226', '0253046', '0253108', '209895-017', '211219-012', '213219-001', '215218-009', '218140-008', '5944-031', '001-285389', '0253169'
    )

    Et j'obtiens l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Illegal mix of collations for operation ' IN '
    Qu'est ce à dire ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Ah ok autant pour moi !!
    En fait, l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Illegal mix of collations for operation ' IN '
    provient du fait que le jeu de caractère utilisé par phpmyadmin n'était pas le même que le jeu de caractère utilisé pour la table.
    J'ai mis latin1_swedish pour les deux, et ça fonctionne maintenant, je n'ai plus d'erreur.

    Meric pour votre aide !!
    Bonne matinée.

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

Discussions similaires

  1. [LDAP] Impossible de faire une requête avec plus de 1 condition
    Par mower666 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 15/02/2013, 11h24
  2. problème pour faire une requête
    Par mitchbuck dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/11/2005, 22h48
  3. [PERL] faire une condition plus compacte
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 28/10/2005, 16h03
  4. [Requête] Faire une requête imbriquée?
    Par sekiryou dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2004, 22h52

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