0

免責事項: 私は言語学者であり、コンピューター科学者ではありません。私はプログラミングに精通していますが、専門家ではありません。このプロジェクトは、絶滅の危機に瀕している言語の大規模な辞書用です。約 1000 個の語彙素を分類して、どの単語が欠落しているか、追加される可能性があるかを視覚的に確認できるようにする必要があります。


MySQL に 2 つのテーブルがあります。

  1. レキシコンテーブル
  2. カテゴリー表

レキシコン テーブルの各レコード (行) には、カテゴリ テーブル (名前をfolderに変更した) の ID に対応する親 ID 値 ( pid ) があります。

隣接モデルに従ってこれを設計しました (ツリーを簡単に変更するには柔軟性が必要です)。

カテゴリー

| folder |     name    | pfolder |
+--------+-------------+---------+
| 1      | Animals     | NULL    |
| 2      | Wild        | 1       |
| 3      | Domestic    | 1       |

辞書

| id     | pid   | word        | translation |
+--------+-------+-------------+-------------+
| 1      | 3     | Hund        | dog         |
| 2      | 2     | Rentier     | reindeer    |
| 3      |       | Maus        | Mouse       |

ゴール

| main    | main_content  |  sub1     | sub1_content | sub2      | sub2_content |
+---------+---------------+-----------+--------------+-----------+--------------+
| Animals | NULL          | Domestic  | Hund         | NULL      | NULL         |
| Animals | NULL          | Wild      | Rentier      | NULL      | NULL         |
| Animals | Maus          | NULL      | NULL         | NULL      | NULL         |

サンプルクエリ

これを行う方法がわかりません。複数のテーブルがあるため、このチュートリアルを単純に実行することはできません。

この単純なクエリはうまくいきませんか?

SELECT main.name  AS main
FROM categories AS main
    LEFT JOIN hd FROM lexicon ON lexicon.pid = categories.main

最終的に

整理された語彙素の素敵なリストを完成させたいと思います。ここでは、フォルダーには太字、リスト アイテムには斜体を使用しました。

  • 動物
    • 野生
      • レンティエ
    • 国内
      • ハンド
    • マウス

このデータは xelatex を使用して印刷されます。簡単にするために、上記の表の例は最小限に抑えました。レキシコン テーブルの実際のクエリには、、、lexemeおよびorthographic word(phonetic word国際音声記号の) が含まれます。

4

1 に答える 1

1

少し複雑ですが、必要なものは得られると思います。難しい変更が 1 つあります。動物の下に表示する場合は、レキシコンの Maus 行に pid=1 を配置する必要があります。

SELECT
   COALESCE(c3.name, c2.name, c1.name) as main
  ,CASE WHEN (c3.name is null and c2.name is null) then lex.word end as main_content
  ,CASE WHEN (c3.name is null and c2.name is not null) then c1.name 
        WHEN (c3.name is not null and c2.name is not null) then c2.name end as sub1
  ,CASE WHEN (c3.name is null and c2.name is not null) then lex.word end as sub1_content
  ,CASE WHEN (c3.name is not null and c2.name is not null) then c1.name end as sub2
  ,CASE WHEN (c3.name is not null and c2.name is not null) then lex.word end as sub2_content
FROM
  Lexicon lex
LEFT JOIN 
  Categories c1 ON lex.pid = c1.folder
LEFT JOIN
  Categories c2 on c1.pfolder = c2.folder
LEFT JOIN
  Categories c3 on c2.pfolder = c3.folder

SQL Fiddle Demo - サブカテゴリ (Wild の下に WildCats) をもう 1 つ追加して、SUB2 が正しく動作しているかどうかをテストしましたか?

于 2013-04-22T12:45:47.460 に答える