4

SQLJOINに関する質問はすでにたくさんありますが、答えがわからなかったので、ここで説明します。

ヘルパークラスwpdbとezsqlを使用してMySQL5.0とWordpressデータベースを使用しています。以下の「単純な」望ましい出力を達成しようとすることは、簡単であることが証明されていません。

現在の出力:

MemberID          MemberName              FruitName
--------------    ---------------------   --------------
1                  Al                     Apple
1                  Al                     Cherry

必要な出力:

MemberID           MemberName            FruitName
-----------        --------------        ------------
1                  Al                    Apple, Cherry

MemberIDテーブルaからMemberName来て、テーブルabから来て、テーブルFruitNameから来ますb。テーブルから他の多くの列を出力しているので、aこのクエリを使用して2つのテーブルを「左結合」しました。

$contents = $wpdb->get_results( $wpdb->prepare("SELECT * FROM a LEFT JOIN b ON a.MemberName = b.MemberName"));

後でechoを使用して列を印刷します。

        <td><?php echo $content->MemberID ?></td>
        <td><?php echo $content->MemberName ?></td>
        <td><?php echo $content->FruitName ?></td>

列の印刷で創造性を発揮できる可能性はありますが、2つのテーブルを異なる方法でクエリ/結合する必要があると思います。私はここでこの議論を見つけ、それをモデルにして質問をしましたが、彼らの解決策を理解しておらず、もっと簡単なものを望んでいます。

4

5 に答える 5

5

GROUP BY MemberNameおよびGROUP_CONCAT(FruitName)。例えば、

SELECT MemberId, MemberName, GROUP_CONCAT(FruitName) FROM a LEFT JOIN b ON a.MemberName = b.MemberName GROUP BY a.MemberName;
于 2009-07-20T05:34:59.480 に答える
3

MySQLを使用していることを考えると、GROUP_CONCAT関数の1つ(使用可能な集計関数の1つ)が探しているものを正確に実行すると思います。

于 2009-07-20T05:33:53.413 に答える
1
SELECT MemberID, MemberName, GROUP_CONCAT(FruitName SEPARATOR ',') FROM a LEFT JOIN b ON a.MemberName = b.MemberName GROUP BY MemberID, MemberName;
于 2009-07-20T05:34:29.387 に答える
0

1つの方法は、PHP(または使用している言語)で出力をループしてビルドすることです。

dbから行をフェッチするとき、またはユーザーに表示するときに、フルーツを連結します。後者は他の何よりもビューロジックの問題であるため、後者をお勧めします。

SQLでそれを実行したい場合は、文字列を連結するための独自の集計関数を作成する必要があります(MySQLに組み込まれているとは思いませんが、間違っている可能性があります)。それはそれほど些細なことではありません。

メンバーを1つだけフェッチする場合は、SQLで変数を使用してフェッチすることもできます。正確なMySQL構文については証明していませんが、MSSQLの場合は次のようになります。

DECLARE @frutis VARCHAR(MAX)

SELECT @fruits = ISNULL(@fruits + ', ' + FruitName, FruitName)
FROM ... 

SELECT @fruits
于 2009-07-20T05:33:11.417 に答える
0

@アダム答えるのが遅いかもしれないことは知っていますが、同じ問題に遭遇したので、マイクの答えを拡張して複数の同じ果物の発生を解決するための私の解決策は次のとおりです。

SELECT MemberId, MemberName, GROUP_CONCAT(distinct FruitName) FROM a LEFT JOIN b ON a.MemberName = b.MemberName GROUP BY a.MemberName;

したがって、基本的には、GROUP_CONCAT関数に「distinct」を追加する必要があります。

それがお役に立てば幸いです。

于 2014-02-13T11:38:59.260 に答える