Ce problème est étrange et je pense que je ne fais que penser à ce problème. J'essaie d'obtenir (récursivement) toutes les URL de page associées à un entrepreneur donné. Les trois tableaux correspondants sont les suivants:SQL/MySQL récursivement tirer de la même table
|-------------------------------------------------|
| client_sections |
|-------------------------------------------------|
| contractor_id | reusable_section_id |
|-------------------------------------------------|
|--------------------------------------------------------|
| reusable_sections |
|--------------------------------------------------------|
| reusable_category_id | reusable_section_id |
|--------------------------------------------------------|
|--------------------------------------------|
| reusable_content |
|--------------------------------------------|
| reusable_section_id | page_url |
|--------------------------------------------|
Maintenant, voici la nécessité - La première requête est
SELECT reusable_section_id FROM client_sections where contractor_id = '119'
Cela obtient tous les haut niveau « sections parents » - ce qui est reusable_category_id
dans la tableau reusable_sections
. Si je devais m'arrêter là, je l'aurais traité. Mais la mise en garde que je rencontre est que chacune de ces sections retournées "pourrait" être aussi une section parent. J'ai essayé un imbriqué SELECT
et le résultat était tout simplement désastreux!
Ce que je tentais:
» Get contractor parent sections by contractor ID from client_sections table
» get sections by reusable_category_id = reusable_section_id in reusable_sections --
» get page_url for all the sections returned (including the initial parents)
by reusable_section_id in reusable_content -- I am good until this point
» recur the last two steps with the current reusable_section_id as
reusable_category_id to check for children (!!#[email protected]#!!!)
» Finally return all pages for all sections under that contractor_id
J'ai essayé des requêtes allant de JOINS
fou s à emboîtés SELECT
s en vain. J'ai lu beaucoup de messages, y compris This One. Je suis un développeur SQL compétent, je pense que ma logique est imparfaite et un simple point dans la bonne direction peut juste susciter ma créativité! Est-ce que la meilleure façon est une boucle WHILE
? SELECT
imbriqué? JOIN
? Mon cerveau est frit! Aidez-moi?
Combien de niveaux de récursivité vous attendez-vous? Si vous n'avez pas de limite, vous ne pouvez pas résoudre ce problème simplement en faisant des jointures externes à gauche. Vous aurez besoin d'une procédure stockée, ou vous devrez l'implémenter en utilisant un langage de programmation. C'est fondamentalement un arbre. –
Théoriquement, il pourrait être infini .. C'est pourquoi la récursion m'a bluffé .. Je pourrais le faire avec JOINS sinon .. – Zak
https://stackoverflow.com/questions/10646833/using-mysql-query-to-traverse- rows-to-make-a-récursive-tree: D. Voir ceci: https://www.slideshare.net/billkarwin/models-for-hierarchical-data –