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 :

PHP/SQL - Many-to-Many : Système d'article avec ajout/suppression automatique de tags lors d'un edit


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de Wirbelwind
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 47
    Points : 109
    Points
    109
    Par défaut PHP/SQL - Many-to-Many : Système d'article avec ajout/suppression automatique de tags lors d'un edit
    Bonjour,

    Alors voilà, j'aurais besoin d'aide pour un script, c'est la dernière étape, et je n'y arrive vraiment pas ... merci à ceux qui pourront m'aider

    Ce système est similaire au système de tags de WordPress, les tags ne sont présent qu'une seule fois, mais peuvent être reliés à plusieurs articles.

    Les tables de la base de donnée d'un modèle Many-to-Many, se composent ainsi :



    Par exemple, lorsque j'insère un article "Article 1" contenant les tags "Tag 1" et "Tag 2", je me retrouve avec cette configuration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    --       Article    --          -- article_tag_xref --          --        tag     --
    ----------------------          ----------------------          --------------------
    ID : 1                          article_id : 1                  tag_id : 1
    Titre : "Titre article 1"       tag_id : 1                      tag_titre : "Tag 1"
                                    ----------------------          --------------------
                                    article_id : 1                  tag_id : 2
                                    tag_id : 2                      tag_titre : "Tag 2"
    Ma question est donc la suivante :

    Lorsque je décide d'éditer un article existant, et que je décide aussi d'ajouter et de supprimer des tags, comment faire pour
    ajouter les nouveaux et supprimer ceux retirés, tout en conservant ceux qui sont toujours présent ?

    Mais en utilisant une méthode meilleure que de l'INSERT/DELETE à chaque fois ...



    Voilà, je vois dit un GRAND MERCI d'avance !


    .

  2. #2
    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 ne suis pas sûre de bien comprendre ta question, mais si tu fais cette vue, elle sera ensuite éditable, puisque tu es en inner join avec des clés étrangères :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Create or replace view v_repart as
    Select a.article_id,
    a.nom as article_nom,
    t.tag_id,
    t.nom as tag_nom
     
    From article_tag_xref r
    Inner join article a on r.article_id=a.article_id
    Inner join tag t on r.tag_id=t.tag_id
    Mais pense bien a mettre une clé d unicité sur la table article_tag_xref, sur le couple des 2 foreign keys.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre régulier Avatar de Wirbelwind
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 47
    Points : 109
    Points
    109
    Par défaut
    Merci Dendrite de t'être penché sur ma question

    Oui, je sais parfaitement comment les sélectionner, mon problème c'est plus à l'ajout/suppression.
    Peut-être, je ne me suis pas bien exprimé, je vais essayer d'être plus clair

    Par exemple, j'ai créé un article : "Article Hello World", contenant les tags "tag 1", "tag 2", "tag 3".
    Demain , je décide de le mettre à jour à l'aide d’un formulaire, en changeant des tags : j'ajoute "Tag 4", et retire "Tag 3"

    Je cherche donc à obtenir le système qui me permettra de supprimer la liaison "tag3", d'ajouter la liaison "tag4", mais en conservant les liaisons "tag1" et "tag2" telle quelle.
    Et au passage, ajouter dans la table "Tags" les tags n'existant pas déjà.

    Avant j’utilisais un "DELETE WHERE id_article = xxx" puis un "INSERT" ( dans "article_tag_xref" ) avec "ON DUPLICATE" dans la table "tags" à chaque modification
    de l'article, mais j'aimerais quelque-chose d'un peu .. mieux que cette technique développée à l'arrache.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Il n'y a pas 36000 façons de mettre à jour une table de liaison.
    Si tu ne veux pas utiliser la technique Delete/Insert, il faut lire ce qu'il y a en base comparer avec ce que tu veux avoir après pour faire 3 listes : ce qu'il faut supprimer, ce qu'il faut créer et ce qu'il faut mettre à jour (ou ne pas toucher selon le fonctionnement souhaité), et ensuite faire les requêtes correspondantes.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre régulier Avatar de Wirbelwind
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 47
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par Celira Voir le message
    Il n'y a pas 36000 façons de mettre à jour une table de liaison.
    Si tu ne veux pas utiliser la technique Delete/Insert, il faut lire ce qu'il y a en base comparer avec ce que tu veux avoir après pour faire 3 listes : ce qu'il faut supprimer, ce qu'il faut créer et ce qu'il faut mettre à jour (ou ne pas toucher selon le fonctionnement souhaité), et ensuite faire les requêtes correspondantes.
    Très bien, merci, .. je crois que je cherche à faire plus compliqué que ça ne l'est

    je vais me pencher un peu plus sur ça.

Discussions similaires

  1. [2.x] Sonata Admin : entités many-to-many (article et mots-clés)
    Par drmedia dans le forum Symfony
    Réponses: 0
    Dernier message: 23/05/2015, 09h44
  2. Requete SQL entre 2 tables liés par une relation many to many
    Par macmanaman dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/05/2009, 16h37
  3. Système d'article php
    Par Net.Actu dans le forum Langage
    Réponses: 6
    Dernier message: 18/07/2008, 22h51
  4. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50

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