0
votes

MySQL: Renvoie le reste sur une relation parent / enfant

J'ai un article article code>. 1 article code> peut être une suite d'un autre article article code>, donc la colonne parent_id code>.

SELECT
    p.id, p.title, c.id, c.title
FROM
    article p
    LEFT JOIN article c ON p.id = c.parent_id
WHERE
    p.id = 61


2 commentaires

Conseil: N'utilisez jamais SELECT *


@Strawberry il a été mis à des fins de test ... J'ai modifié la question de prévenir les distractions


3 Réponses :


1
votes

Solution: ID d'entrée de formulaire, récupérez la ligne et vérifiez parent_id est null ou intergéré. Ensuite, formez différentes requêtes pour atteindre votre objectif.

si parent_id est null. Prenez l'ID MySQL. xxx

exemple: 1. Si vous passez ID comme 61 alors, Sélectionnez * à partir de l'article où ID = 61;

ici parent_id est null, vous devez donc exécuter la requête,

Sélectionnez * à partir de l'article P où parent_id = 61; < OL START = "2">

  • Si vous passez une pièce d'identité comme 14 alors, Sélectionnez * à partir de l'article où id = 14;

    ici parent_id n'est pas null, la valeur parent_id est 61.

    Votre requête est donc: Sélectionnez * à partir de l'article P où (parent_id = 61 ou ID = 61) et ID! = 14;

    J'espère que vous avez compris


  • 0 commentaires

    1
    votes

    Vous devez rejoindre la même table article avec conditions:

    1. la rangée peut être enfant
    2. la ligne peut être parent
    3. la ligne peut être un frère de soeur

      mais n'oubliez pas de filtrer le même enfant (quand p.id = c.id). xxx

      Exemple


    2 commentaires

    Si je choisis un enregistrement qui ne contient aucun enfant, disons 45 , puis il ne renvoie rien. Il devrait renvoyer au moins l'enregistrement 45


    ok, j'ai changé p.id! = c.id à non p.id <=> C.ID et je suis maintenant capable de sélectionner des enregistrements sans enfants



    1
    votes
    SELECT s.* 
      FROM article c 
      JOIN article p 
        ON p.id = c.parent_id 
      JOIN article s 
        ON s.parent_id = c.parent_id 
       AND s.id <> c.id 
     WHERE c.id = 14
     UNION
    SELECT p.* 
      FROM article c 
      JOIN article p 
        ON p.id = c.parent_id 
     WHERE c.id = 14;
    +----+-------+-----------+
    | id | title | parent_id |
    +----+-------+-----------+
    | 62 | Blues |        61 |
    | 74 | Folk  |        61 |
    | 61 | Easy  |      NULL |
    +----+-------+-----------+
    

    3 commentaires

    L'enregistrement 14 n'est pas de retour. Je veux retourner l'enregistrement principal (même si l'enregistrement principal comme aucun enfant)


    De plus, si je sélectionne 61 rien n'est renvoyé.


    Je vais laisser ces aspects comme un exercice pour le lecteur.