
[code]

    users
    id | name
    1  | tanaka
    2  | suzuki
    3  |  sato
    
    articles
    id|writer_1|writer_2|writer_3
    1 |tanaka  |tanaka|tanaka
    2 |suzuki  |sato    |tanaka
    3 |suzuki  |suzuki  | sato
    
[/code]

MySQLを使用しております。  
上記のようなテーブルがあり、  
usersのデータを取得する際に  
「articlesテーブルのwriter_xカラムに自身のnameが何回出てくるか」  
をSQLで集計することは可能でしょうか。  
SQLの例も教えて頂けると助かります。

希望するレスポンスは以下です。

[code]

    {
        name: tanaka,
        hitCount:4
    },
    {
        name : suzuki,
        hitCount:3 
    },
    {
        name : sato,
        hitCount:2 
    }
    
[/code]

よろしくお願いします。


CC BY-SA 3.0
2017-10-06T12:21:20.977
38492
2017-10-07T01:32:37.770
25669
question
php mysql sql
MySQLで集計 カラムを検索した際のHIT数を取りたい

[code]

    SELECT writer, count(writer) FROM (
      SELECT writer_1 AS writer FROM articles
      UNION ALL
      SELECT writer_2 AS writer FROM articles
      UNION ALL
      SELECT writer_3 AS writer FROM articles
    ) a GROUP BY writer;
    
    +--------+---------------+
    | writer | count(writer) |
    +--------+---------------+
    | sato   |             1 |
    | tanaka |             1 |
    | yamada |             1 |
    +--------+---------------+
    (元のデータは再現してません)
    
[/code]

このように同種のカラムを1つの行に複数持たせる(=列持ち)と検索や集計が単純にできなくなりますので、テーブル設計の典型的なアンチパターンとされています。可能であればテーブル設計を見直すことをお進めします。


CC BY-SA 3.0
2017-10-07T01:32:37.770
38499
2017-10-07T01:32:37.770
5793
38492
answer