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

PHP & Base de données Discussion :

Boucle et INSERT si la ligne n'existe pas [MySQL]


Sujet :

PHP & Base de données

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 57
    Points
    57
    Par défaut Boucle et INSERT si la ligne n'existe pas
    Bonjour,

    Je me cantonne habituellement à des requêtes du style INSERT/SELECT les plus basiques et je me demande actuellement quelle est la meilleur manière d'insérer une ligne si la ligne en question n'existe pas encore.

    Voici la situation pratique :

    Ma page php est visitée par les visiteurs (j'entends par là que cette page est "fréquentée"/consultée relativement souvent, c'est une page "classique" du site).
    Cette page contient un script php qui génère des données que je dois insérer dans ma table si ces données n'existent pas encore. Ces données sont plutôt simple puisque cela se résume à 4 champs dans une table :
    var | date | author | mod
    S'il y a un enregistrement pour date=$date et author=$author alors il ne faut pas enregistrer les données (car c'est que l'author a déjà enregistré des données à cette date - il ne peut pas y avoir 2 enregistrements à la même date pour un author).
    Ces données sont fournies par une boucle php (qui fait 10 tours avec à chaque fois de nouvelles données à éventuellement insérer dans la table si les données n'y sont pas déjà donc).

    Dois-je faire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while () {
    if (mysql_num_rows("SELECT * FROM table WHERE author='$author' AND date='$date')>0) {
    }
    else {
    INSERT ....;
    }
    }
    :- ?


    Je pensais aussi n'exécuter ce bout de code qu'une fois sur 10 (je suis sur un mutualisé sans CRON, chose que je ne maitrise pas de toute façon) avec un rand(0,10), histoire d'alléger la page 9 fois sur 10 (j'estime qu'il y aura environ une dixaine de nouvelles lignes par page et par jour environ).

    Mmm j'imagine qu'il y a plus optimisé, non :- ?

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    il ne peut pas y avoir 2 enregistrements à la même date pour un author).
    Dans ce cas tu cree une clef unique dans ta table avec ces 2 champs , puis tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("INSER etc....") or die ("Enregistrement deja en base")
    Si l'enregistrement existe mysql va renvoyer un message d erreur du type "existe deja"

    C'est une solution parmis tant d autres

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Ca a l'air de marche comme je le veux . Je ne savais pas qu'on pouvait mettre 2 champs ensemble en clé unique tiens :o...

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

Discussions similaires

  1. insertion des numéros qui n'existe pas dans la base de données
    Par cisco.nat dans le forum Général Java
    Réponses: 5
    Dernier message: 09/07/2013, 12h39
  2. Insert si l'enregistrement n'existe pas deja
    Par Joel Pinto Ribeiro dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/12/2012, 13h45
  3. Insertion si la ligne n'existe pas
    Par hammag dans le forum SQL
    Réponses: 1
    Dernier message: 17/08/2011, 17h20
  4. Réponses: 3
    Dernier message: 12/10/2009, 12h51
  5. Réponses: 3
    Dernier message: 07/01/2008, 13h02

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