Php Scandir 到 Mysql 哪个是好的做法?

标签 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:

好的,我将使用选项 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 Scandir 到 Mysql 哪个是好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30825952/

相关文章:

php - MySQL 查询不返回任何内容

mysql - DotNetNuke MySQL

php - 在 PDO 语句中转义列名

json - 使用linux服务器获取键值对

javascript - 使用 php laravel 框架在 javascript 中生成动态 id

javascript - Facebook PHP SDK 如何从 Facebook JavaScript SDK 2014 获取用户电子邮件

php - 我的 Web 应用程序的最佳 SIMPLE 数据库结构,包含资源、类别和标签

mysql - 检查日期是否介于 MySQL 数据库中的两个日期之间?

java - 从 JSON 对象获取空数据

json - 去 json.Unmarshal 接口(interface)一些子句消失了