-3

mysqlクエリを作成し、以下で作成したようなテーブルにデータを出力する方法を理解するのに苦労しています。

運が悪かったので、数日間遊んでいたので、助けていただければ幸いです。

以下の画像は、私の3つのデータベーステーブル(単純な形式)と、PHP/MYSQLを使用して出力しようとしているものを示しています。

この画像には、各カテゴリの各ユーザーのリストの合計数(数)も示されています。どのようにすべてを結合するかがわかりません。

これが理にかなっていることを願っています!

http://img.photobucket.com/albums/v432/Winegums/table_zps2b57f483.jpg

4

1 に答える 1

0

最初は、このように行うことができます、

SELECT  a.user_name,
        SUM(CASE WHEN c.cat_name = 'books' THEN 1 ELSE 0 END) books,
        SUM(CASE WHEN c.cat_name = 'videos' THEN 1 ELSE 0 END) videos
FROM    users a 
        LEFT JOIN downlods b
            ON a.user_ID = b.user_ID
        LEFT JOIN download_cats c
            ON b.cat_id = c.cat_id
GROUP BY a.user_name

しかし、私はあなたがあなたのテーブルに未知の数を持っていると思います。動的SQLcat_nameの方がはるかに適しています。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN c.cat_name = ''',
      cat_name,
      ''' THEN 1 ELSE 0 END) AS ',
      cat_name
    )
  ) INTO @sql
FROM download_cats;

SET @sql = CONCAT(' SELECT  a.user_name, ', @sql, ' 
                    FROM    users a 
                            LEFT JOIN downlods b
                                ON a.user_ID = b.user_ID
                            LEFT JOIN download_cats c
                                ON b.cat_id = c.cat_id
                    GROUP BY a.user_name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2012-12-29T12:46:31.457 に答える