Question

La situation:

  • MySQL 5.0
  • 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 leurs ID)
  • Il faut aussi un formulaire pour une utilisation dans 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é Set pour, par exemple, tous les enfants 2e

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

Peut-être quelque chose à voir avec une caractéristique de GROUP BY que je ne vois pas?

Mon esprit est tout à fait se retrouver bloqué voir la solution à ce problème de la procédure. Toute aide beaucoup apprécié.

Était-ce utile?

La solution

Don est correct - MySQL n'a pas la fonctionnalité de classement. Mais heureusement, il ne vous permet d'initialiser et de référencer une variable de sorte que vous pouvez coder la logique pour le classement.

Ceci renvoie les lignes pour les enfants 2ème:

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

Changer 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 de vous assurer que le classement est correctement.

Il est pas clair pour moi comment vous voulez utiliser pour une requête UPDATE -. Fournir plus de détails et je mettrai à jour en fonction de vos besoins

Autres conseils

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 numéros d'identification dans la table pour simple mise à jour sur soumettre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top