gpt4 book ai didi

php - MySQL 目录树中的唯一文件名

转载 作者:行者123 更新时间:2023-11-29 13:36:40 24 4
gpt4 key购买 nike

我正在尝试找到最有效的代码来捕获父文件夹中的重复文件名。我使用带有沿袭的父子模型将文件树存储在 MySQL 数据库中:

CREATE TABLE `filetable` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
`parent_id` int(11) NOT NULL,
`path_num` varchar(255) NOT NULL,
`path_string` text() NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;

我正在考虑两种方法:
1. 运行查询:

INSERT INTO filetable (name, parent_id, path_num, path_string) 
SELECT '$name','$pid','$path_num','$path_string' FROM DUAL
WHERE NOT EXISTS
(SELECT name FROM filetable WHERE name='$name');

在 PHP 中:

if (mysql_affected_rows() === 0) takeAction($name);

优点:简单的sql,无需向表中添加行
缺点:双重查询可能会在大表上出现雪

2.在字段上创建唯一索引并使用:

INSERT INTO filetable (name, parent_id, path_num, path_string) 
VALUES ('$name','$pid','$path_num','$path_string')
ON DUPLICATE KEY UPDATE 0=0;

在 PHP 中:

if (mysql_affected_rows() === 2) takeAction($name); // Yes 2 for updates

优点:当 name 重复时,一小部分查询会触发 UPDATE
缺点:表格中多了一行

唯一的字段是path_string,即文件的完整路径。在我的文件系统中,它可能会变得很长,因此是文本类型的字段。在 MySQL 中,无法在 TEXT 字段上创建唯一索引。所以我想做的是创建专栏

`problemsolver` varchar(62) = $parent_id . '_'.$name 

以及其上的具体唯一索引。

我预计这些查询将占所有数据库查询的 10%。

我的问题是您会使用这两种方法中的哪一种,为什么?或者有更好的选择吗?

最佳答案

这两种方法都可以。方法 1 并不理想,因为您的查询更加密集,并且每次都会执行,正如您所说,并不是每次都需要。

方法二是更好的选择,因为您只在需要时做额外的工作,而且效率更高。

此外,为了减少冲突值的可能性,您可以在存储的值中集成时间戳或一些随机数据。

关于php - MySQL 目录树中的唯一文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18649841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com