2017-10-20 3 views
0

Ich möchte GROUP LEFT JOIN Zeilen in meiner Anfrage, mit einem anderen, wie folgt aus:LEFT JOIN GROUP Ergebnis mit gleichen PK

[ID] => 1, 
    [user_email] => '[email protected]', 
    [user_registered] => '2017-10-13 14:39:20', 
    [preferences_id] => 1, 
    [uid] => 1, 
    [user_social_links] => Array 
     (
      [1 *social_id index*] => Array 
       (
        [name] => FACEBOOK 
        [value] => http://facebook.com/url 
        [display] => 1 
       ) 

      [2 *social_id index*] => Array 
       (
        [name] => TWITTER 
        [value] => http://twitter.com/url 
        [display] => 1 
       ) 

     ) 

Ich habe diese Tabellen:

  • Benutzer
  • user_account
  • user_social_links
 
users : 
-------------------------------------------------- 
| ID | user_email  | user_registered  | 
-------------------------------------------------- 
| 1 | [email protected] |2017-10-13 14:39:20 | 
-------------------------------------------------- 
| 3 | [email protected] |2017-10-13 15:20:05 | 
-------------------------------------------------- 
user_account: 
-------------------------------------------------- 
| preferences_id | uid | user_nicename   | 
-------------------------------------------------- 
| 1    | 1 | example nice name1  | 
-------------------------------------------------- 
| 2    | 3 | example nice name2  | 
-------------------------------------------------- 

user_social_links : 
------------------------------------------------------------ 
| social_id | uid | name  | value    | display | 
------------------------------------------------------------ 
| 1  | 1 | FACEBOOK | fb.me/example  | 1  | 
------------------------------------------------------------ 
| 2  | 1 | TWITTER | twitter.com/example| 1  | 
------------------------------------------------------------ 

Meine Frage ist:

SELECT 
user_account.preferences_id,user_account.uid,user_account.user_nicename, 
users.ID,users.user_email,users.user_registered,user_social_links.social_id,user_social_links.value,user_social_links.name,user_social_links.display, 
FROM user_account 
LEFT JOIN user_social_links 
    ON user_social_links.uid = user_account.uid 
LEFT JOIN users 
    ON users.ID = user_account.uid 
WHERE user_account.uid = :userid 

Ausgang:

Array 
(
    [0] => Array 
     (
      [preferences_id] => 1 
      [uid] => 1 
      [user_nicename] => example nice name1 
      [ID] => 1 
      [user_email] => [email protected] 
      [user_registered] => 2017-10-13 14:39:20 
      [social_id] => 1 
      [value] => fb.me/example 
      [name] => FACEBOOK 
      [display] => 1 
     ) 

    [1] => Array 
     (
      [preferences_id] => 1 
      [uid] => 1 
      [user_nicename] => example nice name1 
      [ID] => 1 
      [user_email] => [email protected] 
      [user_registered] => 2017-10-13 14:39:20 
      [social_id] => 2 
      [value] => twitter.com/example 
      [name] => TWITTER 
      [display] => 1 
     ) 

) 

Hinweis: Ich kann GROUP BY nicht user_account.uid (# 1055 only_full_group_by Fehler mysql) verwenden .¿How ich das erste Ergebnis bekommen Beispiel? Ich möchte in einer Abfrage, foreach (PHP) nicht verwenden. Bitte kann mir jemand helfen? freundliche Grüße.

Antwort

0

In MySQL 5.7 Sie GROUP BY auf aggregierten Spalten durch Überschreiben der Standard ONLY_FULL_GROUP_BY sqlmode SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); Verwendung ermöglichen könnte, wie bei Error Code: 1055 incompatible with sql_mode=only_full_group_by

+0

ich darüber readed erklärt, aber ich werde einen Weg ohne Set sql_mode lieber zu tun, wissen Sie, ein anderer Weg? Danke für deine Antwort. – elaineee