0
table: |name|US|IN|SA|CHN|AU|EU|.......
       |john|0 |12|2 |0  |1 |0 |.......
       |andy|20|17|2 |10 |1 |0 |.......

すべての国を含む 200 列のテーブルがあります。それらには、各国からのクリック数の整数のエントリがあります。それらを地理チャートに表示するために、これらの値を次のように解析したいと思います。

出力:

IN,12
SA,2
AU,1

クリック数が0で、ユーザー名johnでグループ化された国を除外したいと思います

ここに私の方法がありますが、不完全です..

 $query = "SELECT * FROM `countries`";


    $result = mysql_query("SHOW COLUMNS FROM `countries`.`graph_geo_table` WHERE Field NOT IN ('Name')");
    if (!$result) {
        echo 'Could not run query: ' . mysql_error();
        exit;
    }

if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {

    echo $row[Field];

    }
}
4

1 に答える 1

0

あなたはこのようにすることができます

SELECT column_name country,
       CASE column_name
       WHEN 'US'  THEN us
       WHEN 'IN'  THEN `in`
       WHEN 'SA'  THEN sa
       WHEN 'CHN' THEN chn
       WHEN 'AU'  THEN au
       WHEN 'EU'  THEN eu
       END clicks
  FROM Table1 t CROSS JOIN
(
  SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
   WHERE TABLE_NAME = 'Table1'
     AND TABLE_SCHEMA = SCHEMA()
     AND COLUMN_NAME <> 'name'
) c  
 WHERE name = 'john'
HAVING clicks > 0
 ORDER BY clicks DESC

出力:

| | 国 | クリック |
|--------|--------|
| | に | 12 |
| | SA | SA | 2 |
| | オーストラリア | 1 |

これがSQLFiddleのデモです

于 2013-09-06T08:53:10.567 に答える