2010-01-10 2 views
1

La situation:Récupération d'un ensemble de tous les enfants Nième

  • 5,0 MySQL
  • 2 tables
  • 1-à-plusieurs clé étrangère parent-enfant (A.ID = B.PARENT_ID)

ce qui est nécessaire:

  • Une requête SELECT qui donne l'ensemble de tous les enfants Nième (triés par ID)
  • ont également besoin d'un formulaire pour une utilisation UPDATE

Exemple:

Tableau B

| ID | PARENT_ID | 
------------------ 
| 1 |  1  | 
| 2 |  1  | 
| 3 |  1  | 
| 4 |  2  | 
| 5 |  2  | 
| 6 |  2  | 
| 7 |  2  | 
| 8 |  3  | 
| 9 |  3  | 
| 10 |  4  | 

Résultat souhaité défini pour, par exemple, tous les 2 enfants

| A.ID | B.ID | B.PARENT_ID | 
----------------------------- 
| 1 | 2 |   1 | 
| 2 | 5 |   2 | 
| 3 | 9 |   3 | 

Peut-être quelque chose à voir avec une fonctionnalité du groupe B Y que je ne vois pas?

Mon esprit est totalement devenu coincé voir la solution à ce problème de la procédure. Tous aident beaucoup apprécié.

+0

J'apprécierais un vote plus que d'accorder la réponse. Mon commentaire est effronté, mais en ce qui concerne les informations fournies et une requête valide et fonctionnelle. Et il y a des exemples de données pour tous ceux qui voudraient vérifier. –

Répondre

2

Don est correct - MySQL n'a pas la fonctionnalité de classement. Mais heureusement, cela vous permet d'initialiser & référence une variable afin que vous puissiez coder la logique pour le classement.

Cela renverra les lignes pour les enfants 2e:

SELECT x.aid, 
     x.bid, 
     x.parent_id 
    FROM (SELECT a.id 'aid', 
       b.id 'bid', 
       b.parent_id, 
       CASE WHEN b.parent_id = @parent_id THEN @rownum := @rownum +1 ELSE @rownum := 1 END AS rownum, 
       @parent_id := b.parent_id 
      FROM TABLE_A a 
      JOIN TABLE_B b ON b.parent_id = a.id 
      JOIN (SELECT @rownum := 0, @parent_id := NULL) r 
     ORDER BY b.parent_id, b.id) x 
WHERE x.rownum = 2 

Changez le WHERE x.rownum = ? à tout ce que les enfants de niveau Nième que vous voulez. Le ORDER BY dans la sous-requête est important pour s'assurer que le classement sort correctement.

Je ne suis pas clair comment vous voulez utiliser cela pour une requête UPDATE - fournir plus de détails & Je vais mettre à jour en fonction de vos besoins.

0

MySQL ne dispose pas d'un mécanisme pour faire cette relation Nième. Oracle a une extension et peut-être d'autres.

Quel est le contexte?

Si vous construisez un formulaire HTML pour la mise à jour, générer les données avec boucle et mettre les ID dans la table pour simple mise à jour sur soumettre.

Questions connexes