gpt4 book ai didi

php - 从 MySQL 数据库表中获取 X 列唯一的所有列

转载 作者:行者123 更新时间:2023-11-29 10:51:02 28 4
gpt4 key购买 nike

我的 MySQL 语句被卡住了。我有一个巨大的数据库表(140.000 行),其中包含文件路径、MD5 哈希值和代码版本。现在我想要获取可以根据特定文件的 MD5 哈希值识别版本的行。

类似这样的东西

Path                    MD5                                 Version
----------------------------------------------------------------------------
my/path/to/file 12B9DA49A62D8E7B21B5AA2C6C3126CB 1.2.0
my/path/to/file 12B9DA49A62D8E7B21B5AA2C6C3126CB 1.2.1
my/path/to/file FDA9A7D31ECC70F99D533D88F9EDE441 1.2.2
my/path/to/file E68CC0233A1719A17CDF5D7CFB9539A8 1.2.3
my/path/to/file E68CC0233A1719A17CDF5D7CFB9539A8 1.2.4

因此版本 1.2.2 可以通过文件和哈希轻松识别,因为该文件的 MD5 值是唯一的。

现在我需要该查询的 SQL 语句。我尝试过使用 DISTINCT、使用 HAVING COUNT 和 GROUP BY。但根本没有成功。其实我又回到了开头

SELECT DISTINCT
md5
FROM
source_files
INNER JOIN (
SELECT
*
FROM
source_files
) subq ON source_files.md5 = subq.md5

因为我需要所有列,而不仅仅是 SELECT DISTINCT md5 FROM source_files 返回的 md5 列。但这也会引发错误。另外,我需要按版本分组,因为我只需要一个组合/版本来识别它。

多文件检查

下一个级别也是:如果某个版本无法通过唯一的 MD5 哈希值来识别,因为该版本没有唯一的 MD5 哈希值,则应该针对两个文件、三个文件或四个文件进行“测试”。 .由于某个版本有一个独特的文件/MD5 哈希组合。

这里是多文件检查的更新示例

Path                    MD5                                 Version
----------------------------------------------------------------------------
my/path/to/file 12B9DA49A62D8E7B21B5AA2C6C3126CB 1.2.0
my/path/to/file 12B9DA49A62D8E7B21B5AA2C6C3126CB 1.2.1
my/path/to/file FDA9A7D31ECC70F99D533D88F9EDE441 1.2.2
my/path/to/file E68CC0233A1719A17CDF5D7CFB9539A8 1.2.3 <- same file
my/path/to/file E68CC0233A1719A17CDF5D7CFB9539A8 1.2.4 <- same file

my/path/to/file2 884F676DE41CB35951322B98654E046C 1.2.0 <- same file
my/path/to/file2 884F676DE41CB35951322B98654E046C 1.2.1 <- same file
my/path/to/file2 884F676DE41CB35951322B98654E046C 1.2.2 <- same file
my/path/to/file2 884F676DE41CB35951322B98654E046C 1.2.3 <- same file
my/path/to/file2 3182B2BEDDB1F798F66D27425B9F99D9 1.2.4
my/path/to/file2 3182B2BEDDB1F798F66D27425B9F99D9 1.2.5

因此版本 1.2.3 可以通过第四个"file"和第四个“文件2”来识别

最佳答案

SELECT * FROM source_files
INNER JOIN (
SELECT MD5, COUNT(1) AS CountOf
FROM source_files
GROUP BY MD5
) tbl
ON source_files.MD5=tbl.MD5
WHERE tbl.CountOf = 1

已编辑。 超越:

If a version could not get identified by a unique MD5 hash since there is no unqiue MD5 hash for that version it should get "tested" against two files, or three files, or four... Since there is an unqiuie combination of files / MD5 hashes for a version.

那么看起来source_files表的PK是字段pathMD5的组合。有关以多列作为主键的表的详细信息 herehere .

在这种情况下,您可以更改先前的查询并在多个列上进行GROUP BY(详细信息 here ):

SELECT * FROM source_files
INNER JOIN (
SELECT MD5, COUNT(1) AS CountOf
FROM source_files
GROUP BY path, MD5
) tbl
ON source_files.MD5=tbl.MD5
WHERE tbl.CountOf = 1

关于php - 从 MySQL 数据库表中获取 X 列唯一的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43734689/

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