MySQL结果透视表-某种类型

MySQL结果透视表-某种类型,mysql,database,pivot,Mysql,Database,Pivot,我有一个定义如下的表格: CREATE TABLE `z_data` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `subscriberid` INT(11) NOT NULL DEFAULT '0', `Email Address` VARCHAR(255) NOT NULL DEFAULT '', `Title` VARCHAR(255) NOT NULL DEFAULT '', `Firs

我有一个定义如下的表格:

    CREATE TABLE `z_data` (
    `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `subscriberid` INT(11) NOT NULL DEFAULT '0',
    `Email Address` VARCHAR(255) NOT NULL DEFAULT '',
    `Title` VARCHAR(255) NOT NULL DEFAULT '',
    `First Name` VARCHAR(255) NOT NULL DEFAULT '',
    `Last Name` VARCHAR(255) NOT NULL DEFAULT '',
    `Postal Code` VARCHAR(255) NOT NULL DEFAULT '',
    `banned` INT(11) NOT NULL DEFAULT '0',
    `bounced` INT(1) NOT NULL DEFAULT '0',
    `unsub` INT(1) NOT NULL DEFAULT '0',
    `duplicate` INT(1) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`),
    KEY `idx_subscriberid` (`subscriberid`),
    KEY `idx_banned` (`banned`),
    KEY `idx_bounced` (`bounced`),
    KEY `idx_unsub` (`unsub`),
    KEY `idx_duplicate` (`duplicate`),
    KEY `idx_email` (`Email Address`),
    FULLTEXT KEY `idx_emailaddress` (`Email Address`)
    ) ENGINE=MYISAM AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
此表由CSV文件填充,如果主数据库中的emailaddress已准备就绪,则查询会用一个数字更新
subscriberid
列,查询如下:

    UPDATE `z_data` AS z
    LEFT JOIN main_subscribers AS b ON (z.`Email Address`=b.emailaddress && b.listid=1 && b.unsubscribed!=0)
    SET z.subscriberid = b.subscriberid
    WHERE b.subscriberid IS NOT NULL;";
现在,我的问题。我需要在十个字段的行中选择
z_data
中所有记录的下标,这可以是逗号分隔的列表。 我的结果可能类似于:

    1293572,1293573,1293574,1293575,1099590,1174275,1293576,1293577,1293578,1293579,
    673070,813617,1293580,1293581,1293582,1131221,1293583,1182045,419085,1293584,
    1050278,1293585,1064945,638483,737691,1293586,1293587,799800,1110596,1293588,
    1293589,1293590,1293591,421394,1293592,1293593,1293594,1293595,1293596,851491,
    1293597,1293598,1293599,628250,1293600,1293601,1293602,535366,1293603,256590,
    1293604,1293605,736956,1293606,1209511,673075,1293607,1293608,1293609,754357,
这样做的原因是,我可以将这些值存储在一个文本字段中,以便以后在in子句中使用,同时还可以使用一个合理的可读脚本

我已设法获得第一排,因此:

    SELECT GROUP_CONCAT(a.subscriberid) AS 'IDs' FROM (
      SELECT subscriberid FROM 
      `z_data`
      WHERE subscriberid!=0
      LIMIT 1,10
    ) AS a
但是,当带有subscriberID的行数未知时,不知道如何“遍历”表的其余部分


如有任何建议,我们将不胜感激。

数据库应:;每列只应存储一条数据。在另一列中存储多个ID是非常糟糕的做法-您应该使用一个ID来代替。我非常同意您的看法。然而,我是在传统osftware的限制下工作的,并且对这种形式的定义有要求。最终,SubscriberID将在单个字段中用作选定订阅者的定义。因此,尽管这种方法并不优雅,但它是可以接受的。一旦存储了选择定义,表z_数据就会被删除。这很公平。在不了解上下文的情况下,我无法做出任何具体的评论:-)