-2

PHP で SQL クエリを使用して、"users" テーブルから 5 つの列を表示しています。そのための私のコードは次のとおりです。

SELECT DISTINCT account_id, full_name, email, login, phone, updated_at, last_request_at, unconfirmed_email FROM $table WHERE id < '300'

基本的に、このテーブルには 2 種類のユーザー (管理者アカウントと「サブユーザー」と呼びます) があります。これらはユーザーですが、管理者権限はなく、親の管理者アカウントによって作成されました。このため、親管理者アカウントとそのサブユーザーはすべて同じ「account_id」を共有します。以下に例を示します (ゴミで申し訳ありません):

| account_id | full_name   | Superhero?  |
| 1          | Batman      |  1          |
| 1          | Robin       |  1          |
| 1          | Magneto     |  0          |
| 2          | Spiderman   |  1          |
| 2          | The Hulk    |  1          |
| 2          | Wolverine   |  1          |
| 3          | Professor X |  1          |
| 4          | Cyclops     |  1          |
| 4          | Shrek       |  0          |
| 4          | Superman    |  1          |
| 4          | Bob         |  0          |

したがって、スパイダーマンがハルクとウルヴァリンのアカウントを作成したふりをすることができます。これは、スパイダーマンが account_id "2" の最初のインスタンスであるため、管理者アカウントを持っていることを示しています。

ご覧のとおり、full_name は一意ですが、重複する account_id が多数あります。各 ID の最初のインスタンスのみが表示されるように調整したいと思います。異なる account_id は 4 つしかないため、4 つのエントリのみを表示する必要があります。そのようです:

| account_id | full_name   | Superhero?  |
| 1          | Batman      |  1          |
| 2          | Spiderman   |  1          |
| 3          | Professor X |  1          |
| 4          | Cyclops     |  1          |

どうすればこれを達成できますか?

4

3 に答える 3

1

おそらく別の列を追加する必要があります。account_id usingGROUP BY句ごとに個別のレコードを取得できるようになりましたが、集計されていないすべての列の結果はあいまいになる可能性があります。すべての accout_id のどのレコードが「最初」であるかを判断するには、グループ内で承認または指標を付ける必要があります。各グループのどのレコードが最初のクエリであるかを列にマーキングすると、クエリが簡単になります。それがなければ、どのレコードが「最初」であるかを伝えるクエリを受け入れる必要があります。full_name のアルファベット順の例:

SELECT account_id, 
       full_name, 
       email, 
       login, 
       phone, 
       updated_at, 
       last_request_at, 
       unconfirmed_email 
  FROM table1 WHERE full_name IN (
    SELECT MIN(full_name) 
      FROM table1 
      GROUP BY account_id 
      WHERE id < '300'
  )
于 2013-09-13T10:23:29.333 に答える
-1

これを試して

select * from table1
group by account_id

ここでデモ

これにより、すべてのaccount_idの最初のものが得られます

于 2013-09-13T10:05:11.100 に答える