sql >> Database teknologi >  >> RDS >> Mysql

MySQL-forespørgsel - Sammenføj data baseret på to faktorer, og tilpas den måde, dataene sorteres på baseret på værdier

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

For det første, som andre har nævnt, er en af ​​grundene til, at denne forespørgsel er så besværlig at skrive, at du skal bruge en EAV-struktur. Konceptet med en "meta"-tabel er virkelig et forbud mod relationelt design. For det andet, for at få information ud af en EAV, skal du oprette det, der kaldes en krydstabulatorforespørgsel, hvor du bygger de kolonner, du ønsker i din forespørgsel. Generelt er relationelle databaser ikke designet til on-the-fly kolonnegenerering, som jeg gør i min løsning og er påkrævet for EAV'er.



  1. SQL Opret flere tabeller på én gang

  2. Laravel-tidsstempler for at vise millisekunder

  3. Hvordan skal jeg indeksere en forespørgsel med to intervalbetingelser?

  4. Slipning af unavngivne begrænsninger