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
3 Réponses :
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.
exemple:
1. Si vous passez ID comme 61 alors,
Sélectionnez * à partir de l'article où ID = 61; P> ici parent_id est null, vous devez donc exécuter la requête, P> Sélectionnez * à partir de l'article P où parent_id = 61; P> < OL START = "2">
Si vous passez une pièce d'identité comme 14 alors,
Sélectionnez * à partir de l'article où id = 14; P>
ici parent_id n'est pas null, la valeur parent_id est 61. p>
Votre requête est donc: Sélectionnez * à partir de l'article P où (parent_id = 61 ou ID = 61) et ID! = 14; P> LI>
ol> J'espère que vous avez compris p> p> si parent_id est null. Code> Prenez l'ID MySQL. p>
Vous devez rejoindre la même table mais n'oubliez pas de filtrer le même enfant (quand p.id = c.id). p> Exemple P> P> article code> avec conditions:
Si je choisis un enregistrement qui ne contient aucun enfant, disons 45 code>, puis il ne renvoie rien. Il devrait renvoyer au moins l'enregistrement 45 code>
ok, j'ai changé p.id! = c.id code> à non p.id <=> C.ID code> et je suis maintenant capable de sélectionner des enregistrements sans enfants
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 |
+----+-------+-----------+
L'enregistrement 14 code> 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 code> rien n'est renvoyé.
Je vais laisser ces aspects comme un exercice pour le lecteur.
Conseil: N'utilisez jamais
SELECT * CODE>@Strawberry il a été mis à des fins de test ... J'ai modifié la question de prévenir les distractions