json对象中只有一个数组

时间:2016-07-19 06:23:05

标签: php json ajax

我有5个表可供用户上传的不同文件。我想把所有带有相应数据的文件放在一个数组中,这样就可以将5个文件数据放在一个数组中。

所有表都具有相同的结构:

user_id, file_type, file_size, file_name, file_new_name, file_path, date_created 

在PHP中我使用此查询select * from degree_files, profile_pictures, cpr_files, backgroundcheck_files, video_files where degree_files.user_id = :user_id,如果我在工作台中运行它,它会给我所有5个文件数据,但json对象只有一个数组。

如何在一个数组中显示所有数据或什么是正确的解决方案,因为我现在正在分别查询每个表?

我试过了:

$backgroundCheck = $user_home->runQuery("select * from degree_files, profile_pictures, cpr_files, backgroundcheck_files, video_files where degree_files.user_id = :user_id");
$backgroundCheck->execute(array(":user_id"=>$user_id));
$nanny_backgroundCheck_file = $backgroundCheck->fetchAll(PDO::FETCH_ASSOC);


$file_name = array();
foreach ($nanny_backgroundCheck_file as $c){
    $file_name[] = $c['file_name'];
}

$arr[] = array('file_name'=>$file_name);
echo json_encode($arr, JSON_UNESCAPED_UNICODE);

和AJAX通话:

$.getJSON("PHP/nannyInfo.php", function(data) {
        //SELECT2 DATA
        $.each(data.nanny_backgroundcheck_file, function(index, data) {
        console.log(data);

        });

});

我在控制台中看到的内容。

enter image description here

1 个答案:

答案 0 :(得分:2)

首先查询。你试图从多个表中获取一个列,对吧?如果是这样,我建议使用以下语法:

$sql = "
    select file_name from degree_files where user_id = :user_id
    UNION select file_name from profile_pictures where user_id = :user_id
    UNION select file_name from cpr_files where user_id = :user_id
    UNION select file_name from backgroundcheck_files where user_id = :user_id
    UNION select file_name from video_files where user_id = :user_id";

然后,实际的SQL执行基本上没问题,但我将其简化为:

$backgroundCheck = $db->prepare($sql);
$backgroundCheck->execute(array(":user_id"=>1)); // 
$fileNames = $backgroundCheck->fetchAll(PDO::FETCH_COLUMN, 'file_name');

echo json_encode($fileNames, JSON_UNESCAPED_UNICODE);