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 :

Comment afficher plusieurs enregistrements ou la valeur d un champs est la meme


Sujet :

MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Points : 46
    Points
    46
    Par défaut Comment afficher plusieurs enregistrements ou la valeur d un champs est la meme
    Bonjour, je suis débutant en php/mysql, j'ai commancé un petit code qui enregistre des données dans une base mysql (easyphp1.8)
    mais lorsque je veux faire un nouveau enregistrement, je veux vérifier d'abord si cet enregistrement existe déja ou pas pour éviter les doublons, j'ai donc un champ "reference" que je veux tester avant de faire le nouveau enregistrement pour savoir si la référence existe déja dans la base de données ou pas, si elle existe, l'enregistrement ne se fait pas et si elle existe pas j autorise l'enregistrement,
    ca marche seulement si la référence du nouveau enregistrement est en premiere position dans ma base de données mais si cette référence existe dans l'id 2 par exemple ca marche pas, car mon code lie seulement la 1 er ligne enregistré dans la base, mais comment faire pour que ma requete vérifie si cette référence existe plus loin dans la base, il doit falloir passer toutes les lignes mais comment ?
    Help
    Merci de votre aide

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Ne sachant pas ce que tu as mis dans ton code, ni dans ta requête, voici le moyen, en une seule ligne, de savoir si une référence existe déjà ou pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(id)
    FROM ta_table
    WHERE reference = ta_reference
    Si le résultat renvoyé est différent de 0 (en l'occurence 1, sinon c'est que tu as déjà des références en double), alors la référence existe déjà...

    ced

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Points : 46
    Points
    46
    Par défaut
    Merci pour ta réponse, est ce que tu peux m'expliquer ce que fait ce code ?
    Merci

    sinon:
    ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT reference FROM table
    et je veux donc vérifier si la référence entrée depuis un formulaire existe déja ou pas dans la table dans le champs reference

    Merci beau coup de votre aide
    Chris

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Ma requête compte le nombre de ligne dont la référence est égale à une référence que tu passes dans la clause WHERE.
    On aurait pu aussi se passer du comptage pour faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id
    FROM ta_table
    WHERE reference = ta_reference
    Cette requête ramène tous les identifiants d'une référence donnée. Donc si il y a au moins une ligne renvoyée, c'est que la référence existe.

    Pour te mettre au SQL (la clause WHERE étant une clause de base en SQL), je te recommande fortement ce tutoriel : le SQL de A à Z. Toutes les explications y figurent bien mieux que je ne pourrais les donner.

    ced

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Je conseille d'introduire une clause LIMIT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id
    FROM ta_table
    WHERE reference = ta_reference
    LIMIT 1
    De cette manière, dès que le SGBDR a trouvé un résultat, il peut arrêter d'en chercher d'autres, puisque le résultat voulu est de savoir si un enregistrement vérifiant la requête existe.

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Citation Envoyé par jeremya Voir le message
    Je conseille d'introduire une clause LIMIT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id
    FROM ta_table
    WHERE reference = ta_reference
    LIMIT 1
    De cette manière, dès que le SGBDR a trouvé un résultat, il peut arrêter d'en chercher d'autres, puisque le résultat voulu est de savoir si un enregistrement vérifiant la requête existe.
    Euh, oui en général, mais pas vraiment dans le cas présent .
    Puisque l'objectif de la requête est de détecter l'existence ou non d'un identifiant, elle n'est supposée renvoyer qu'une seule ligne au plus (ou alors c'est qu'il y a déjà des doublons).
    De plus, LIMIT limite le nombre de lignes affichées par la requête, mais je ne suis pas du tout certain que ça modifie quoi que ce soit au plan d'exécution de cette requête...

    ced

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Citation Envoyé par christophe_s46 Voir le message
    j'ai donc un champ "reference" que je veux tester avant de faire le nouveau enregistrement pour savoir si la référence existe déja dans la base de données ou pas, si elle existe, l'enregistrement ne se fait pas et si elle existe pas j autorise l'enregistrement
    Pour éviter d'avoir à tester la présence ou l'absence d'une référence, tu peux ajoueter une contrainte d'unicité à cette référence.
    Ensuite, tu peux ajouter des enregistrements avec INSERT IGNORE sans te soucier de la présence ou non de la référence.

  8. #8
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    Citation Envoyé par jeremya Voir le message
    Ensuite, tu peux ajouter des enregistrements avec INSERT IGNORE sans te soucier de la présence ou non de la référence.
    Oui mais là, ce n'est absolument pas ce qu'il veut faire (eviter les doublons)
    Par contre, pour la contrainte d'unicité, je suis d'accord. Le plus simple étant la solution de ced quand même

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Points : 46
    Points
    46
    Par défaut Merci ca marche !
    Bonjour
    Merci a vous tous ca marche très bien !
    Merci beaucoup
    Christophe

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 12/05/2014, 10h31
  2. Réponses: 2
    Dernier message: 30/11/2007, 17h54
  3. Réponses: 7
    Dernier message: 27/06/2006, 20h43
  4. Réponses: 6
    Dernier message: 19/05/2006, 14h22
  5. [MySQL] afficher plusieurs enregistrements par page par page à la volée
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/03/2006, 12h22

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