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