sql >> Database >  >> RDS >> Mysql

MySQL-query - Voeg gegevens samen op basis van twee factoren en pas vervolgens de manier aan waarop de gegevens worden gesorteerd op basis van waarden

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

Ten eerste, zoals anderen al hebben gezegd, is een van de redenen waarom deze query zo omslachtig is om te schrijven, dat u een EAV-structuur moet gebruiken. Het concept van een 'meta'-tafel is echt een gruwel voor relationeel ontwerp. Ten tweede, om informatie uit een EAV te halen, moet u een zogenaamde kruistabelquery maken waarin u de kolommen bouwt die u in uw query wilt hebben. Over het algemeen zijn relationele databases niet ontworpen voor het on-the-fly genereren van kolommen, zoals ik doe in mijn oplossing, en zijn ze vereist voor EAV's.



  1. voeg contacten in de database in maar wil geen reeds bestaand contact dupliceren

  2. Alleen database-back-ups in WHM

  3. iOS - Juiste opmaak van tijdstempels tussen mySQL (apache) en iOS (NSDate)

  4. Sharding en ID-generatie als instagram