当前位置: 首页 > 面试题库 >

存储未知长度的数组

全弘深
2023-03-14
问题内容

我让我的用户以HTML形式添加数字输入,并用值填充它们。该表单在提交时被序列化,并发送到一个PHP文件,该文件使用PDO将数据插入到MySQL数据库中。数据库表中有一堆列,用于存储表单中的其他值,但是用于存储用户添加的输入的列的设置如下:

input_value_1
input_value_2
input_value_3
input_value_4
...
...
input_value_10

这些列允许使用,NULL因为我根本不知道用户是否会添加任何数字输入。

有没有更好的方法来存储这些数字?

以下是我的JS的一部分,用于获取表单数据并将其发送到LandOwners.php,后者将值插入到我的数据库中。代码中 没有
数字输入(由于不确定如何存储它们的数据,所以我还没有添加它们)。

$("#createLandOwnerForm").on( "submit", function( event ) {
    event.preventDefault();

    createLandOwner($(this).serialize(), appendCreatedLandOwnerToSelect, appendCreatedLandOwnerToSelect_Error);

    $('#createLandOwnerForm')[0].reset();
});

function createLandOwner(landOwner, onSuccess, onError) {    
     var data = landOwner + "&action=create";

     $.ajax({
        type: "post",
        url: host + 'LandOwners.php',
        data: data,
        success: onSuccess,
        error: onError
     });
}

以下是LandOwners.php的一部分,该部分将插入 没有
数字输入的mydatabase中(由于我不确定如何/不应该输入,所以我还没有添加它们)。

$stmt = $pdo->prepare("INSERT INTO land_owner (land_owner_name, land_owner_identification_number, land_owner_contact, land_owner_phone, land_owner_email, land_contracts) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->execute([$land_owner_name, $land_owner_identification_number, $land_owner_contact, $land_owner_phone, $land_owner_email, $land_contracts]);

$last_inserted_land_owner_id = $pdo->lastInsertId();

$stmt = $pdo->prepare("SELECT * FROM land_owner WHERE land_owner_id = ?");
$stmt->execute([$last_inserted_land_owner_id]);

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  $arr[] = $row;
}

if(!$arr) exit('No rows');

echo json_encode($arr);

$stmt = null;

以下是LandOwners.php的一部分,该部分从我的数据库中选择数据。我想要(仍然能够)将结果作为JSON。

$arr = [];

if (isset($_POST["land_owner_id"])){
  $stmt = $pdo->prepare("SELECT * FROM land_owner WHERE land_owner_id = ?");
  $stmt->execute([$land_owner_id]);
} else {
    $stmt = $pdo->prepare("SELECT * FROM land_owner");
    $stmt->execute();
}

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  $arr[] = $row;
}

if(!$arr) exit('No rows');

echo json_encode($arr);

$stmt = null;
break;

问题答案:

如果你在一个情况发现自己在那里你开始有column1column2在桌子上-有机会,你的设计是越来越有缺陷的,你应该建立单独的表-
每个columnX都有自己的一排。如果发现自己在同一张表上有多个重复的列,最好有一个单独的表。

这样,您可以避免将逗号分隔的值存储在列中,避免在突然需要引入另一个值的情况下破坏代码/查询column{X+1}-而是可以根据需要具有任意数量的输入值。

对您来说,这就像是一个名为的新表land_owner_input,在其中您拥有值(您将放入columnX)和land_owner对该值所属行的引用。

典型的设计模式就是这样。

CREATE TABLE land_owner_input (
    land_owner_input_id INT(11) AUTO_INCREMENT
    land_owner_id INT(11), 
    land_owner_input_value VARCHAR(MAX)
);

请记住,您land_owner_id在新表中的类型和大小应与其引用的ID完全相同。

您还可以在land_owner_id和的land_owner表ID之间创建外键约束,以确保数据完整性。

有了新表后,就可以使用来一起查询它们LEFT JOINJOIN如果有输入值,则只返回一个普通表即可)。

SELECT *
FROM land_owner AS lo
LEFT JOIN land_owner_input AS loi
    ON loi.land_owner_id = lo.land_owner_id


 类似资料:
  • 问题内容: 我希望能够“快速”构建一个numpy数组,但我不知道该数组的大小。 例如,我想做这样的事情: 这将导致包含x的所有元素,这显然是一个简单的答案。我很好奇这是否可能? 问题答案: 构建一个Python列表并将其转换为Numpy数组。每个附加项需要O(1)的摊销时间+ O( n )才能转换为数组,总共需要O( n )。

  • 问题内容: 不知道频道 长度时,我无法关闭频道 它给我错误 这是合乎逻辑的-当第二个goroutine关闭通道试图发送给它时,它关闭了它。在这种情况下关闭渠道的最佳方法是什么? 问题答案: 通道关闭后,您将无法在该通道上发送更多值,否则会出现混乱。这就是您的经验。 这是因为您启动了使用同一个通道的多个goroutine,并且它们在该通道上发送值。然后关闭每个通道。而且由于它们未同步,因此一旦第一个

  • 问题内容: 我正在用Java解析具有以下规范的字节数组: 今天,我没有看到任何解决方案来解析此数组以获取具有正确类型的7变量。您是否确认或者我是否缺少Java中的魔术函数之类的东西,该函数允许在字节数组中查找字符串“限制”(我看不出如何将Minimum value与相关的ASCII字符区分开)。 两个字符串之间是否有关于特殊字符的“约定”? 问题答案: 好吧,您知道名字从字节9开始,姓氏在字节结尾

  • 我试图修复一个java套接字通信错误,服务器不知道输入消息的长度。在当前情况下,服务器测试输入是否完成方法。然而,这种方法并不总是返回正确答案。它会导致读取部分输入。似乎有两种不同的可能性来解决这个问题。 > 客户端应该在发送后关闭其输出流,但这会导致客户端不读取响应,因为输出流关闭时套接字也会关闭。 有没有其他建议,特别是在nio包的帮助下? 非常感谢。

  • 编辑:在评论中进行了一些讨论后,发现由于幸运地了解了浮点数是如何在C中实现的,我问了一些与我想问的不同的东西。 我想使用比更大的整数(对我来说是8个字节)(对我来说是8个字节),可能不会重复出现在数组或bigint库中。由于我的是16个字节,我认为只需切换类型就可以了。结果表明,即使可以表示更大的整数,你也不能在不失去精度的情况下进行操作——用这些更大的整数。所以不可能实现我想做的事情。实际上,正

  • 我想为一个文件存储未知成员数(介于0到5000之间)的数据。就像Instagram为用户的朋友所做的那样。 到现在为止,我存储了9个成员,为此,我创建了单独的列。通过这样做,我可以连接不同的表。 你可以清楚地看到这里有很多值是空的。如果一个文件有5000个成员,那么创建这样数量的列可能会很困难,而且许多值将为空。 我知道Instagram使用SQL,我如何将这些数据存储在MYSQl中,而且我应该能