Php Scandir到Mysql哪个是好习惯?

时间:2015-06-14 04:27:14

标签: php mysql json

我的文件结构如下所示。

Ali
 --543
     --01.jpg
     --02.jpg  
 --544
 --545
Veli
 --002

像这样我有50个主文件夹和每个主文件夹它有500章文件夹。每个章节文件夹中都有30个图像。我将这个图像路径和文件夹名称保存到Mysql。然后从保存的数据中我拉出Json数据以使用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:

好的我将使用Option 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);

1 个答案:

答案 0 :(得分:1)

如果您完全不需要查询数据库中的单个图像,并且只打算存储您打算在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"]}
]}
]