1

状況:

  • MySQL 5.0
  • 2つのテーブル
  • 1対多の親子外部キー関係(A.ID = B.PARENT_ID)

必要なもの:

  • N番目のすべての子のセット(IDでソート)を生成するSELECTクエリ
  • UPDATEで使用するためのフォームも必要です

例:

表B

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

たとえば、すべての2番目の子供に望ましい結果セット

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

おそらく、私が見ていないGROUP BYの機能と関係がありますか?

この問題の解決策を手続き的に見て、私の心は完全に行き詰まりました。すべてが大いに感謝するのに役立ちます。

4

2 に答える 2

2

ドンは正しいです-MySQLにはランキング機能がありません。しかし、幸いなことに、変数を初期化して参照できるため、ランク付けのロジックをコーディングできます。

これにより、2番目の子の行が返されます。

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

を必要なNレベルの子に変更しWHERE x.rownum = ?ます。サブクエリのORDER BYは、ランキングが正しく表示されるようにするために重要です。

これをUPDATEクエリにどのように使用するかは私にはわかりません。詳細を提供してください。ニーズに合わせて更新します。

于 2010-01-10T08:48:17.593 に答える
0

MySQLには、このN番目の関係を実行するメカニズムがありません。Oracleには拡張機能があり、おそらく他の拡張機能もあります。

コンテキストは何ですか?

更新用のHTMLフォームを作成する場合は、forループを使用してデータを生成し、送信時に簡単に更新できるようにIDをテーブルに配置します。

于 2010-01-10T06:08:50.473 に答える