我有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);
});
});
我在控制台中看到的内容。
答案 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);