sql >> Databasteknik >  >> RDS >> Mysql

MySQL-fråga - Sammanfoga data baserat på två faktorer och anpassa sedan hur data sorteras baserat på värden

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

För det första, som andra har nämnt, är en av anledningarna till att den här frågan är så besvärlig att skriva att du måste använda en EAV-struktur. Konceptet med en "meta"-tabell är verkligen ett anathema för relationsdesign. För det andra, för att få ut information ur en EAV, måste du skapa vad som kallas en korstabellsfråga där du bygger de kolumner du vill ha i din fråga. Generellt sett är relationsdatabaser inte designade för kolumngenerering i farten som jag gör i min lösning och krävs för EAV.



  1. Hur uppdaterar du i SQL varje rad i tabellen genom att hitta alla rader som är lika för en kolumn och sedan ställa in en annan kolumn lika med varandra

  2. Oracle Regexp för att ersätta \n,\r och \t med mellanslag

  3. Vänster JOIN snabbare eller Inner Join snabbare?

  4. Hibernate + PostgreSQL + Nätverksadresstyp (inet, cdir)