我有如下文件结构。
Ali
--543
--01.jpg
--02.jpg
--544
--545
Veli
--002
像这样我有大约50个主文件夹,每个主文件夹有大约500个章节文件夹。每一章的文件夹里都有30张图片。我将把这个图像路径和文件夹名保存到Mysql。然后从保存的数据中提取Json数据以使用wtih AngularJS。那么,哪种方法可以让我的服务器不那么忙呢?
表A:每个图像路径取一个单元格。
name folder path
Ali 787 01.jpg
Ali 787 02.jpg
Ali 787 03.jpg
Ali 787 04.jpg
. . .
. . .
. . .
Ali 788 01.jpg
. . .
. . .
Veli 332 01.jpg
Veli 332 02.jpg
Veli 332 03.jpg
所以我有成千上万的图片,我不认为上述方法是一个不好的做法。
表B:对于每个章节文件夹的图像中的这个表,取一个单元格。这不是好的做法。我应该选哪一个?或者其他建议?
name folder path
Ali 787 "01.jpg","02.jpg","03.jpg","04.jpg","05.jpg","06.jpg..........
Veli 332 "01.jpg"...................
Veli 333 "01.jpg","02.jpg"...........
想要的Json输出:如何接收如下Json输出:
[
{
"name":"Ali",
"random": [
{
"folder": "787",
"path": ["1.jpg", "2.jpg", "3.jpg"]
},
{
"folder": "788",
"path": ["1.jpg", "2.jpg", "3.jpg"]
}
]
},
{
"name":"Veli",
"random": [
{
"folder": "332",
"path": ["1.jpg", "2.jpg", "3.jpg"]
},
{
"folder": "333",
"path": ["1.jpg", "2.jpg", "3.jpg"]
}
]
}
]
编辑-1:
好的,我将使用选项B。看看我的php代码以获得所需的输出。
$sqlx = 'SELECT name,folder,path FROM series';
$result = $dbx->query($sqlx);
$nArray = array();
while($r = mysqli_fetch_assoc($result)) {
$nArray[$r["name"]][] = array('folder' => $r['folder'], 'path' => explode(",", $r['path']));
}
print json_encode($nArray);
最佳答案
如果您完全不需要查询数据库中的单个图像,并且只打算将要复制的字符串存储在JSON数据中,而不是其他任何地方,那么将文件夹聚合存储在一个列中不会有任何危害,就像您在方法B中所做的那样。不在列中存储聚合数据的良好实践的根本原因不适用于用例。但您也可以简单地将准备好的JSON输出存储在那里。。。(见下面的评论。)
但是,如果您预见到希望例如查找具有image111.jpg
的文件夹等的可能性,则无论是在搜索重复项、尝试查找单个图像的父文件夹等方面,您都必须采用方法A,而不是尝试使用类似FIND_IN_SET
或更绝望的LIKE '%image.jpg%'
,找出哪个文件夹中的图像。
如果您希望两者兼得,请在每个A中插入所有文件记录,然后在每个B中有一个“缓存”表,您只需要调用JSON即可。这应该让实用主义者和理想主义者都满意。
对于所需的JSON输出,您可以使用PHP的json_encode()轻松生成JSON数据。只需输入与所需JSON结构匹配的格式的数组。您可以使用json_decode()轻松地“逆向工程”JSON数据。我输入您所需的JSON目标输出进行解码,结果是以下数组的json_encode()
:
array (
0 =>
array (
'name' => 'Ali',
'random' =>
array (
0 =>
array (
'folder' => '787',
'path' =>
array (
0 => '1.jpg',
1 => '2.jpg',
2 => '3.jpg',
),
),
1 =>
array (
'folder' => '788',
'path' =>
array (
0 => '1.jpg',
1 => '2.jpg',
2 => '3.jpg',
),
),
),
),
1 =>
array (
'name' => 'Veli',
'random' =>
array (
0 =>
array (
'folder' => '332',
'path' =>
array (
0 => '1.jpg',
1 => '2.jpg',
2 => '3.jpg',
),
),
1 =>
array (
'folder' => '333',
'path' =>
array (
0 => '1.jpg',
1 => '2.jpg',
2 => '3.jpg',
),
),
),
),
)
$json_array = json_decode($your_json_string); echo json_encode($json_array)
的结果如下。你可以用它来测试你的数组。同样的数据,更少的空白。(为了可读性,我显然添加了一些换行符;默认情况下,它只是一行中的一个块,工作原理相同。)[
{"name":"Ali","random":[
{"folder":"787","path":["1.jpg","2.jpg","3.jpg"]},
{"folder":"788","path":["1.jpg","2.jpg","3.jpg"]}
]},
{"name":"Veli","random":[
{"folder":"332","path":["1.jpg","2.jpg","3.jpg"]},
{"folder":"333","path":["1.jpg","2.jpg","3.jpg"]}
]}
]
关于php - Php Scandir到Mysql是一种好的做法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30825952/