0

アイデアは次のとおりです。「辞書を想像してください」。

私には言葉と定義があります。LANGUAGES と ACTIVE LANGUAGES があります。

これは、たとえば、5 つの言語を使用できることを意味しますが、アクティブなのはそのうちの 3 つだけです。

したがって、辞書内のすべての単語、3 行、およびその定義を取得する必要があります。

だから私はこれが必要です:

word BLABLA -> ES: bla
            -> EN: brabra
            -> FR: bleh

word BLIBLI -> ES: NULL
            -> EN: blig
            -> FR: NULL

...

ご覧のとおり、ES と FR の単語 BLIBLI には定義がなく、私が試したあらゆる種類の JOIN で、次のような結果が得られます。

word BLABLA -> ES: bla
            -> EN: brabra
            -> FR: bleh

word BLIBLI -> EN: blig

したがって、すべての結果ではありません。RIGHT JOINSとLEFT JOINSを試しましたが、何も機能しません...

一致した単語ごとに、アクティブな言語が存在するのと同じ数の行を厳密に取得する必要があります。

何かのようなもの:

SELECT *
FROM active_languages al
LEFT JOIN word_definitions wd ON(al.language_id = wd.language_id);

結果は 2 番目の例になります。

しかし、最後のクエリを少し変更すると、次のようになります。

SELECT *
FROM active_languages al
LEFT JOIN word_definitions wd ON(al.language_id = wd.language_id AND wd.word_id = 1);

基本的に、結合に単語 ID を追加すると、次のようなことが起こります。

word BLABLA -> ES: bla
            -> EN: brabra
            -> FR: bleh

もちろん、単語 qith ID 1 だけです。

次に、すべての単語をループする必要があります (実際には、一致した単語のグループになります)。これはおそらく、WHERE フィルタリングを使用してすべての単語を検索する親クエリを介して実行でき、この最後のクエリを ID 単語が親クエリにリンクされたサブクエリとして持つことができることを知っています。しかし、私はそれを行う方法がわかりません。常に「MySQL エラー #1054 - 不明な列エラー」というエラーが表示されます...

どうすればいいですか?

ありがとう!

4

0 に答える 0