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

ndasle7k  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(285)

我一直在尝试将车辆信息存储为json,以便更快地访问车辆图像。
我在数据库中为json设置了一个表。json的设置如下所示。所有的车辆都在这个json中,以及它们的所有图像信息。我不确定这是否是存储数据的最佳方式。我想能够快速搜索的基础上的车辆识别号,以获得只有图像与该车辆识别号。
我的问题:
动态显示相关车辆图像的加载速度。
不只是得到相关的图像;其他车辆图像正在显示
不确定我的json格式是否合理(或者效率低下),我没有太多地使用json
有没有更简单的方法来设置查询特定json的sql表?
可能的解决方案(不限于一种):
重新格式化json以进行简单引用
重新格式化表格以便于查询
编辑“代码循环”以加快运行时间
我以前在inventorypage上设置了循环,这是一个动态页面,使用$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;
            }
        }

上述“代码循环”(用于图像滑块)的预期输出:

{
  src: "image_link",
  h: vehicle_height,
  w: vehicle_width
}
fcwjkofz

fcwjkofz1#

不要试图手工创建json。构造一个包含所有数据的数组,然后调用 json_encode() .

$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);

您还可以考虑使用 vin 就像钥匙一样。那你就不需要循环了,你可以用 $vehicle[$vin] . 你也可以用 JSON_SEARCH() 在mysql查询中,只提取该元素而不是整个数组。

h6my8fg2

h6my8fg22#

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

相关问题