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 :

Comment éviter les conflits dans une db ?


Sujet :

PHP & Base de données

  1. #1
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut Comment éviter les conflits dans une db ?
    Je m'explique :

    Je fais une admin pour des lecteurs volontaires à destination des aveugles.

    Le premier lecteur qui entre la publication toto18, entre le nombre d'articles disons 30 ici...

    Ca lance automatiquement la création de cette table dans la db qui se nommera toto18, créera 30 enregistrements vides du genre article1 article2 etc... et deux champs.

    Ensuite, on lui présente le formulaire dans lequel il fait son choix d'articles à réserver puis à transférer.

    Cela remplira les champs avec en gros à R4 -(réservé par lecteur dont l'id est 4) et T4 (transféré par lecteur dont l'id est 4) etc. etc...

    Capicco ?

    Si un second lecteur ouvre ensuite la même publication Toto18, ça ouvre automatiquement ladite table puisqu'elle existe déjà, sans l'écraser tant qu'à faire... Ca lui présente sous forme de formulaire les champs encore vide, et zou, on continue...

    Mon problème (entre de multiples autres) est le suivant : comment se prémunir des problèmes qui peuvent surgir quand deux lecteurs se connectent en même temps ? D'autant que la publi paraissant le mercredi soir, il y a des chances qu'on se précipite tous à la même heure pour réserver le boulot...

    Merci de vos lumières !

    PS : Si vous voyez un problème grave de méthodologie, n'hésitez pas non plus... C'est pas si simple mon truc et il y a peut-être de merveilleux raccourcis que je ne connais pas, en PHP ou bien en mysql ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bonjour,

    Créer de multiples tables contenant les memes catégories d'information complique déjà les operations de lecture / ecriture.
    Je n'ai pas tout compris a ton systeme mais comment ferrais-tu par exemple pour retrouver une reference ? il te faudra parcourir toutes les tables pour voir si elle est présente dans celle d'un utilisateur.

    Plutot que de créer des tables portant la reference de l'utilisateur, créé une seule table avec une colonne indiquant l'utilisateur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je m'explique, chaque semaine paraît un nouveau toto18 puis 19 puis 20... etc...

    Chaque mois, paraît un nouveau riri13, riri14, riri15 etc...

    Chaque parution, que dis-je, chaque numéro de parution, n'a jamais le même nombre d'articles, et il faut attendre que la parution soit en ligne pour le savoir.

    Chaque table de ma db (en dehors de ma table lecteurs) n'a qu'une durée d'utilité très éphémère, c'est pour se répartir le boulot de lectures en cochant ce qu'on veut à deux niveaux : 1) je m'en charge 2) c'est fini, c'est transféré...

    Voilà un peu pourquoi il me semble indispensable que chaque nouveau numéro crée une nouvelle table, et une fois la parution audio en ligne, je peux détruire la table, je m'en fiche... Elle ne sert qu'à remplir le formulaire pour se compléter harmonieusement à chaque parution sans s'envoyer des tonnes de mails et en cochant ce qu'on veut lire sans se consulter au gré de ses disponibilités...

    Cela te semble-t-il plus logique maintenant ?

    Mon problème qui reste entier : Comment éviter le choc de deux lecteurs qui modifient la db en même temps ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Non ca n'est pas plus logique, tes données pourraient tout de même etre dans la meme table. Mais tu fais comme tu le souhaites.

    Pour ton probleme : tu peux ajouter une condition WHERE a ton update.
    ie :
    les deux utilisateurs ont la liste resultat de SELECT * FROM table WHERE dispo = 0;

    le premier s'affecte des elements UPDATE ... WHERE dispo = 0
    dans le meme temps le deuxieme s'affecte les memes elements, les mises à jour ne seront pas faites car les elements ne sont plus en dispo = 0. Tu peux ensuite comparer le nombre d'enregistrements traités au nombre de modifications demandés pour lui annoncer qu'un certain nombre d'actions n'ont pas pu être prise en compte.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Oh que non je fais pas comme je souhaite... J'essaie simplement désespérément de comprendre ta solution, d'autant qu'elle paraît plus simple...

    Une seule table... Avec donc quoi dedans ? C'est ça que je comprends pas...
    On fait un enregistrement par article c'est celà ? du genre TOTO18article16 etc, et autant de champs que de lecteurs ?

    Mais alors, comment je distingue article réservé et article transféré dans ce cas ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  6. #6
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    je soutiens la solution de sabotage qui est beaucoup plus flexible et logique.

    Créé les tables suivantes :

    ARTICLES(id, id_publication)

    PUBLICATIONS(id, id_auteur, nb_articles)

    AUTEURS(id, nom, prenom)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    -- Récupérer les articles de l'auteur 18
    SELECT ARTICLES .* FROM ARTICLES LEFT JOIN PUBLICATIONS ON ARTICLES.id_publication=PUBLICATIONS.id
    LEFT JOIN AUTEURS ON PUBLICATIONS.id_auteur=AUTEURS.id
    WHERE AUTEURS.id=18
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    -- Récuperer les publications d'un auteur 18
    SELECT PUBLICATIONS.* FROM PUBLICATIONS LEFT JOIN AUTEURS ON PUBLICATIONS.id_auteur = AUTEURS.id WHERE AUTEURS.id=18
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    -- Articles d'une publication 5
    SELECT ARTICLES.* FROM ARTICLES LEFT JOIN PUBLICATIONS ON PUBLICATIONS.id = ARTICLES.id_publication
    WHERE id_publication = 5
    Pour l'insertion d'articles il te suffit de créer autant de champs que le nécessite nb_articles ou alors de n'en créer que ce qu'il faut, et proposer l'ajout d'un article si le nombre d'articles existant pour cette publication est inférieur à nb_articles.

Discussions similaires

  1. Comment éviter les doublons dans une ComboBox
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/07/2017, 16h03
  2. comment faire pour éviter les scroller dans une page quelque soit la résolution
    Par ghou67 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/11/2007, 09h15
  3. Comment afficher les toolTipText dans une zone de statut ?
    Par nicok01 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/01/2005, 13h32
  4. Comment éviter les doublons dans ma table
    Par einegel dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2004, 12h18
  5. Éviter les doublons dans une requete
    Par royrremi dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 03/08/2004, 19h37

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