2017-07-11 14 views
0

私はpあたり1人のユーザーしか表示しないこのPHPスクリプトを手に入れました。 account_idが、そのようには機能しません。アカウントごとに1人のユーザーを選択してください

ユーザーが同じアカウントに他の2人のユーザーを持っている場合は、同様に表示されます。私はそれを修正するために何も考えることができませんでした。

$groupConfig = [ 
'Administrator' => ['groupId' => 5, 'accountType' => [5]], 
'Community Manager' => ['groupId' => 4, 'accountType' => [4]], 
'Gamemaster' => ['groupId' => 3, 'accountType' => [4]], 
'Tutor' => ['groupId' => 1, 'accountType' => [2, 3]], 
]; 

foreach ($groupConfig as $groupTitle => $group) { 
    $k = $SQL->query('SELECT 
    `p`.`name`, 
     `p`.`lastlogin`, 
      `p`.`id`, 
       `p`.`group_id`, 
        `a`.`type` 
       FROM 
        `players` AS `p` 
       LEFT JOIN `accounts` AS `a` 
        ON `a`.`id` = `p`.`account_id` 
       WHERE `a`.`type` 
        IN (' . implode(',', $group['accountType']) . ') 
         AND group_id = ' . $group['groupId'] . ' 
        ORDER BY 
       `group_id` 
      DESC')->fetchAll(); 
    } 

答えて

0

あなたは同じ値(p.account_id)によってグループにGROUP BY句を使用して試すことができます。

データで同じアカウントに複数のユーザーが参加できるのはなぜですか?

$groupConfig = [ 
'Administrator' => ['groupId' => 5, 'accountType' => [5]], 
'Community Manager' => ['groupId' => 4, 'accountType' => [4]], 
'Gamemaster' => ['groupId' => 3, 'accountType' => [4]], 
'Tutor' => ['groupId' => 1, 'accountType' => [2, 3]], 
]; 

foreach ($groupConfig as $groupTitle => $group) { 
    $k = $SQL->query('SELECT 
    `p`.`name`, 
     `p`.`lastlogin`, 
      `p`.`id`, 
       `p`.`group_id`, 
        `a`.`type` 
       FROM 
        `players` AS `p` 
       LEFT JOIN `accounts` AS `a` 
        ON `a`.`id` = `p`.`account_id` 
       WHERE `a`.`type` 
        IN (' . implode(',', $group['accountType']) . ') 
         AND group_id = ' . $group['groupId'] . ' 
        GROUP BY `p`.`account_id` 
        ORDER BY 
       `group_id` 
      DESC')->fetchAll(); 
    } 
0

変更fetchAllのフェッチ、またはSQLクエリに "LIMIT" を追加します。複数の結果が得られることは絶対に普通です。あなたはテーブルアカウントからクエリしていない、あなたはテーブルプレーヤーを照会しています。したがって、結果には、アカウントにプレーヤーがある行数だけ含まれます。最善の方法は、適切なテーブルを照会することですが、前述の修正プログラムでも解決できます。

関連する問題