3

我想创建一个表来显示数据库中的数据列表。但是这些值不会存储在表中的行中,而是由每个具有自己的列的值分隔。

所以我的样本数据:

ID  Email           Value    
1   david@a.com     ABC    
1   david@a.com     DEF    
1   david@a.com     GHI    
2   jonathan@a.com  ABC    
2   jonathan@a.com  DEF    
2   jonathan@a.com  GHI

我想将其显示为:

ID  Email           Value1  Value2  Value3    
1   david@a.com     ABC     DEF     GHI    
2   jonathan@a.com  ABC     DEF     GHI

我的代码:

$query1 = "SELECT wp_users.ID, user_email, VALUE FROM wp_users LEFT JOIN wp_cimy_uef_data on wp_users.ID = wp_cimy_uef_data.USER_ID";
$listEmail = array();
$listValues = array();

// Start the Load
$statement = $db->query($query1);
if ( $statement->rowCount() == 0 )
{
    echo '<strong>List is Empty</strong>';
} else foreach($statement as $row):

    $ID = htmlspecialchars($row['ID']);
    $email = htmlspecialchars($row['user_email']);
    $value = htmlspecialchars($row['VALUE']);

    $listEmail = array_fill_keys($ID, $email);
    $listValues = array_fill_keys($ID, $value);

endforeach; 
mysqli_close($db);

print_r($listEmail);
4

2 回答 2

3
SELECT wp_users.ID, wp_users.user_email, 
GROUP_CONCAT(wp_users.value) 
FROM wp_users LEFT JOIN wp_cimy_uef_data on wp_users.ID = wp_cimy_uef_data.USER_ID 
GROUP BY wp_users.user_email

确实使用GROUP_CONCAT来连接值列,并使用 GROUP BY 来对 user_email 进行分组。

于 2013-06-07T14:38:21.387 回答
2

你可以像这样构造你的循环:

$table_rows = array();

foreach($statement as $row) {
    $ID = htmlspecialchars($row['ID']);
    $email = htmlspecialchars($row['user_email']);
    $value = htmlspecialchars($row['VALUE']);

    if (empty($table_rows[$ID])) {
        $table_rows[$ID] = array(
            'email' => $email,
            'values' => array(),
        );
    }

    $table_rows[$ID]['values'][] = $value;

}

或者您可以在查询中使用 group by。

于 2013-06-07T14:39:28.077 回答