Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Abfrage – Verbinden Sie Daten basierend auf zwei Faktoren und passen Sie dann die Art und Weise an, wie die Daten basierend auf Werten sortiert werden

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

Erstens, wie andere bereits erwähnt haben, ist einer der Gründe, warum diese Abfrage so umständlich zu schreiben ist, dass Sie eine EAV-Struktur verwenden müssen. Das Konzept einer „Meta“-Tabelle ist wirklich ein Gräuel für relationales Design. Zweitens müssen Sie, um Informationen aus einem EAV zu erhalten, eine sogenannte Kreuztabellenabfrage erstellen, in der Sie die gewünschten Spalten in Ihrer Abfrage erstellen. Im Allgemeinen sind relationale Datenbanken nicht für die spontane Spaltengenerierung konzipiert, wie ich es in meiner Lösung mache, und sind für EAVs erforderlich.