sql >> データベース >  >> RDS >> Mysql

MySQLクエリ-2つの要素に基づいてデータを結合し、値に基づいてデータを並べ替える方法をカスタマイズします

    Select wp_users.ID
        , wp_users.user_login
        , wp_users.user_email
        , wp_users.user_nicename
        , Min( Case When wp_usermeta.meta_key = 'first_name' Then wp_usermeta.meta_value End ) As first_name
        , Min( Case When wp_usermeta.meta_key = 'last_name' Then wp_usermeta.meta_value End ) As last_name
        , Min( Case When wp_usermeta.meta_key = 'address' Then wp_usermeta.meta_value End ) As address
        , Min( Case When wp_usermeta.meta_key = 'dob' Then wp_usermeta.meta_value End ) As dob
    From wp_user
        Join wp_usermeta
            On wp_usermeta.user_id = wp_user.ID
    Where Exists    (
                    Select 1
                    From wp_usermeta As Meta1
                    Where Meta1.user_id = wp_user.id
                        And Meta1.meta_key = 'wp_user_level' 
                        And Meta1.meta_value = '0' 
                    )
            And wp_usermeta.meta_key In('first_name','last_name','address','dob')                   
    Group By wp_users.ID
        , wp_users.user_login
        , wp_users.user_email
        , wp_users.user_nicename
    

    まず、他の人が述べているように、このクエリを書くのが非常に面倒な理由の1つは、EAV構造を使用する必要があることです。 「メタ」テーブルの概念は、実際にはリレーショナル設計に対する嫌悪感です。次に、EAVから情報を取得するには、クエリに必要な列を作成するクロス集計クエリと呼ばれるものを作成する必要があります。一般に、リレーショナルデータベースは、私のソリューションで行っているようなオンザフライの列生成用に設計されておらず、EAVに必要です。



    1. JDBCを使用してJavaでレポートを作成し、SQL日付とJavaユーティリティ日付の間で変換を試みます

    2. 姓名から一意のユーザー名を生成しますか?

    3. MySQLDBから値を取得するときに誤ってエンコードされた文字を取得する

    4. JavaのSQLUPDATEステートメントの影響を受ける行数を返します