Php 如何组织JSON以更快地访问信息?

Php 如何组织JSON以更快地访问信息?,php,mysql,json,Php,Mysql,Json,我一直在尝试将车辆信息存储为JSON,以便更快地访问车辆图像 我在数据库中为JSON设置了一个表。JSON的设置如下所示。所有车辆都包含在这个JSON中,以及它们的所有图像信息。我不确定这是否是存储数据的最佳方式。我希望能够基于VIN快速搜索,仅获取与该VIN相关联的图像 我的问题: 动态显示相关车辆图像的加载速度 不只是获取相关的图像;其他车辆图像正在显示 不确定我的JSON格式是否合理(或效率低下),我没有太多地使用JSON 有没有更简单的方法来设置SQL表以查询特定的JSON 可能的解决方

我一直在尝试将车辆信息存储为JSON,以便更快地访问车辆图像

我在数据库中为JSON设置了一个表。JSON的设置如下所示。所有车辆都包含在这个JSON中,以及它们的所有图像信息。我不确定这是否是存储数据的最佳方式。我希望能够基于VIN快速搜索,仅获取与该VIN相关联的图像

我的问题:

  • 动态显示相关车辆图像的加载速度
  • 不只是获取相关的图像;其他车辆图像正在显示
  • 不确定我的JSON格式是否合理(或效率低下),我没有太多地使用JSON
  • 有没有更简单的方法来设置SQL表以查询特定的JSON
  • 可能的解决方案(不限于一种):

    • 重新格式化JSON以进行简单引用
    • 重新格式化表格以便于查询
    • 编辑“代码循环”以加快运行时间
    我以前在InventoryPage上设置过循环,这是一个动态页面,它使用$\u GET获取相关的VIN,通过我的数据库迭代获取与VIN相关的图像。这是可行的,但由于需要大量的迭代,耗时太长

    通常有比这个多得多的条目,为了更容易阅读,我把它修剪了回去。我们平均有100辆车,每辆车有20-60张图像。 以下是我的JSON格式示例:

    [{"vin": "JF1GR89658L827860", "images": [{"image": 
    "https://cdn04.carsforsale.com/3/420970/23594569/1133776572.jpg?
    dt=100320180034", "width": 800, "height": 600}, {"image": 
    "https://cdn04.carsforsale.com/3/420970/23594569/1133776606.jpg?
    dt=100320180034", "width": 800, "height": 600}]}, 
    {"vin": "6Y86G433753", "images": [{"image": 
    "https://cdn04.carsforsale.com/3/420970/23684711/1135715340.jpg?
    dt=100620180134", "width": 800, "height": 600}, {"image": 
    "https://cdn04.carsforsale.com/3/420970/23684711/1135715371.jpg?
    dt=100620180134", "width": 800, "height": 600}]}]
    
    我当前必须遍历JSON并查找相关图像的代码,我认为这些图像不正确地显示了来自不同车辆的图像:

    foreach ($vehicles as $vehicle)
            {
                if ($vehicle['vin'] === $vin) {
    
                    $last_element = ',';
    
    
    
                    while ($vehicle['images']) {
                        echo "{";
                        echo "src: '" . $vehicle['images'][0]['image'] . "',";
                        echo "h: " . $vehicle['images'][0]['height'] . ",";
                        echo "w: " . $vehicle['images'][0]['width'];
                        echo "}" . $last_element;
    
    
                    } 
    
                    break;
                }
            } 
    
    上述“代码循环”(用于图像滑块)的预期输出:


    不要试图手工创建JSON。用所有数据构造一个数组,然后调用
    json\u encode()


    您还可以考虑将JSON列作为一个对象而不是一个数组,以<代码> VIN <代码>为关键字。这样就不需要循环,只需使用

    $vehicle[$vin]
    。您还可以在MySQL查询中使用
    JSON\u SEARCH()
    来提取该元素,而不是整个数组。

    不要尝试手动创建JSON。用所有数据构造一个数组,然后调用
    json\u encode()


    您还可以考虑将JSON列作为一个对象而不是一个数组,以<代码> VIN <代码>为关键字。这样就不需要循环,只需使用

    $vehicle[$vin]
    。您也可以在MySQL查询中使用
    JSON\u SEARCH()
    来提取该元素,而不是整个数组。

    这是一种固执己见的回答,但我真的不认为使用JSON列有什么好处。我认为您拥有的数据似乎更适合传统的相关表格。我认为JSON列非常适合存储更多非结构化数据、具有不同属性的不同对象集。但是您有一组相似的对象,每个对象都是一个具有完全相同属性的平面列表。图像记录将完全适合它们自己的表,可能与其他VIN相关数据的不同表有关系,我认为这样检索相关数据会更简单、更高效。就我的两分钱,我知道这并不能直接回答问题,但这需要一点评论。

    这是一种固执己见的回答,但我真的不认为使用JSON专栏有什么好处。我认为您拥有的数据似乎更适合传统的相关表格。我认为JSON列非常适合存储更多非结构化数据、具有不同属性的不同对象集。但是您有一组相似的对象,每个对象都是一个具有完全相同属性的平面列表。图像记录将完全适合它们自己的表,可能与其他VIN相关数据的不同表有关系,我认为这样检索相关数据会更简单、更高效。就我的两分钱,我知道它并不能直接回答问题,但这需要一点评论。

    $vehicle['vin']=$vin
    正在分配值,
    =
    正在测试它。好眼力,现在就改变它,测试,然后尽快编辑问题。在我看来,使用SQL JSON函数真的很痛苦。坚持正常的数据库规范化。使用JSON时,许多容易使用连接的事情变得很棘手。例如,我认为JSON组件没有类似于重复键更新上的
    。我是说,您可能会考虑以与查询普通DB表相同的方式访问JSON。因此,与具有vin属性的对象数组(如
    [{“vin”):“JF1GR89658L827860”,“images”:[…
    )不同,具有按vin命名的属性的对象(如
    {“JF1GR89658L827860”):{“images”:[…
    。这样,您就不必重复整个过程,只需直接访问您要查找的vin即可。不过,不确定您是如何创建该表中的JSON的,因此这样做可能不可行。
    $vehicle['vin']=$vin
    是赋值,
    ==
    是测试它。目光敏锐,立即更改,测试,然后尽快编辑问题。在我看来,使用SQL JSON函数是一件非常痛苦的事情。坚持正常的数据库规范化。许多容易使用连接的事情在JSON中变得棘手。例如,我认为没有任何东西类似于JSON组件的重复键更新上的
    。我是说,您可能会考虑以与查询普通DB表相同的方式访问JSON。因此,不要使用具有vin属性的对象数组,如
    [{“vin”:“JF1GR89658L827860”,“images”:[…
    ,而是一个具有以vin命名的属性的对象,如
    {“JF1GR89658L827860”:{“images”:[…
    。这样,您就不必重复整个过程,您只需直接访问您要查找的vin。不确定您是如何访问的
    {
      src: "image_link",
      h: vehicle_height,
      w: vehicle_width
    }
    
    $json_array = array();
    foreach ($vehicles as $vehicle)
    {
        if ($vehicle['vin'] = $vin) {
            foreach ($vehicle['images'] as $image) {
                $json_array[] = ['src' => $image['image'], 'h' => $image['height'], 'w' => $image['width']];
            } 
            break;
        }
    }
    echo json_encode($json_array);