那么,您的问题是您无法在唯一的MySQL查询中同时检索所有数据,因为它们不是相关数据.你的问题只是输出,所以,你只需要在一个唯一的数组中将3组结果联系起来.要做到这一点:
>执行三个查询,并将它们保存在三个不相关的数组中.
>将它们与您将与所有人共享的密钥相关联.
>遍历所有数组,将值分配给主“输出”.
有了它,您将拥有可以输出的数组以获得所需的CSV.为了示例的缘故,由于我无法使用您的vars和查询编写有效的代码,我编写了以下示例.它有3个不同的数组,您必须使用模拟数据从数据库中获取,但您可以抓住这个想法.只需复制并粘贴即可获得实时示例:
$playlists = array(
array(
'id' => 1
, 'data' => 'playlist1'
)
, array(
'id' => 2
, 'data' => 'playlist2'
)
, array(
'id' => 3
, 'data' => 'playlist3'
)
);
$songs = array(
array(
'id' => 1
, 'data' => 'song1'
)
, array(
'id' => 2
, 'data' => 'song2'
)
, array(
'id' => 3
, 'data' => 'song3'
)
, array(
'id' => 4
, 'data' => 'song4'
)
, array(
'id' => 5
, 'data' => 'song5'
)
);
$rates = array(
array(
'id' => 1
, 'data' => 'rating1'
)
, array(
'id' => 2
, 'data' => 'rating2'
)
, array(
'id' => 3
, 'data' => 'rating3'
)
, array(
'id' => 4
, 'data' => 'rating4'
)
, array(
'id' => 5
, 'data' => 'rating5'
)
, array(
'id' => 6
, 'data' => 'rating6'
)
);
// Count all the arrays and get the bigger:
$num = 0;
$play_num = count( $playlists );
$num = ($play_num > $num) ? $play_num : $num;
$song_num = count( $songs );
$num = ($song_num > $num) ? $song_num : $num;
$rate_num = count( $rates );
$num = ($rate_num > $num) ? $rate_num : $num;
$output = array();
for ( $i = 0; $i<=$num; $i++ ) {
$output[] = array(
'id_playlist' => !empty( $playlists[$i]['id'] ) ? $playlists[$i]['id'] : ''
, 'data_playlist' => !empty( $playlists[$i]['data'] ) ? $playlists[$i]['data'] : ''
, 'id_song' => !empty( $songs[$i]['id'] ) ? $songs[$i]['id'] : ''
, 'data_song' => !empty( $songs[$i]['data'] ) ? $songs[$i]['data'] : ''
, 'id_rate' => !empty( $rates[$i]['id'] ) ? $rates[$i]['id'] : ''
, 'data_rate' => !empty( $rates[$i]['data'] ) ? $rates[$i]['data'] : ''
);
}
foreach ( $output as $out ) {
echo implode( ' - ', $out);
echo '
';
}
输出:
1 - playlist1 - 1 - song1 - 1 - rating1
2 - playlist2 - 2 - song2 - 2 - rating2
3 - playlist3 - 3 - song3 - 3 - rating3
- - 4 - song4 - 4 - rating4
- - 5 - song5 - 5 - rating5
- - - - 6 - rating6