You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于MySQL数据库检索.txt文件中歌曲标题的技术咨询

嘿,我来帮你搞定这个跨数据源匹配歌曲的问题!你有MySQL数据库和TXT文件两个数据源,核心是通过歌曲标题+艺术家这两个唯一标识来关联数据,下面给你两种实用方案:

方案一:把TXT文件导入MySQL,用SQL直接关联查询

这个方法适合需要长期复用数据或者要做复杂统计的场景,步骤很清晰:

  1. 整理TXT文件格式
    确保你的Database2.txt是规范的分隔格式(比如逗号分隔的CSV,或者制表符分隔),每行对应一条记录,字段顺序是「歌曲标题、艺术家、位置」。如果原来的格式混乱,先手动调整下,避免导入出错。

  2. 在phpMyAdmin中创建对应的数据表
    打开phpMyAdmin,找到你的数据库,新建一张表(比如命名为database2),添加三个字段:

  • song_title:文本类型(比如VARCHAR(255))
  • artist:文本类型
  • location:文本类型(存储库存位置)
  1. 导入TXT文件到新表
    在phpMyAdmin里选中刚创建的database2表,点击顶部的「导入」按钮,选择你的Database2.txt,然后根据文件格式设置参数:
  • 格式选「CSV」(如果是制表符分隔就选「CSV using LOAD DATA」,分隔符设为\t)
  • 勾选「跳过第一行」(如果TXT有表头的话)
  • 编码选「UTF-8」避免乱码,然后点击执行完成导入。
  1. 写SQL关联查询数据
    现在两个数据源都在MySQL里了,用INNER JOIN关联两张表,就能拿到你要的结果:
SELECT 
    d2.song_title, 
    d2.artist, 
    d2.location, 
    d1.`播放次数("spins")` AS play_count
FROM 
    database1 d1
INNER JOIN 
    database2 d2 
ON 
    LOWER(d1.`歌曲标题`) = LOWER(d2.song_title) 
    AND LOWER(d1.`歌曲艺术家`) = LOWER(d2.artist);

这里用LOWER()是为了忽略大小写差异,避免因为大小写不一致导致匹配失败。如果不需要忽略大小写,去掉LOWER()就行。

方案二:用PHP脚本直接读取TXT并匹配MySQL数据

如果不想把TXT导入数据库,或者只需要一次性查询,用PHP脚本直接处理更灵活:

  1. 连接MySQL数据库
    先写数据库连接代码(替换成你的phpMyAdmin账号密码):
<?php
$servername = "localhost";
$username = "你的数据库用户名";
$password = "你的数据库密码";
$dbname = "Database1";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接是否成功
if ($conn->connect_error) {
    die("数据库连接失败: " . $conn->connect_error);
}
  1. 读取TXT文件并匹配数据
    假设你的TXT是制表符分隔的,用fgets逐行读取,然后查询MySQL:
// 读取TXT文件
$txtFilePath = "Database2.txt";
$fileHandle = fopen($txtFilePath, 'r');

// 跳过表头(如果TXT第一行是字段名的话)
fgets($fileHandle);

// 逐行处理
while (($line = fgets($fileHandle)) !== false) {
    // 分割每行数据
    $line = trim($line);
    list($songTitle, $artist, $location) = explode("\t", $line);

    // 预处理SQL,避免SQL注入
    $sql = "SELECT `播放次数(\"spins\")` AS play_count 
            FROM database1 
            WHERE LOWER(`歌曲标题`) = ? 
            AND LOWER(`歌曲艺术家`) = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ss", strtolower($songTitle), strtolower($artist));
    $stmt->execute();
    $result = $stmt->get_result();

    // 输出结果
    if ($row = $result->fetch_assoc()) {
        echo "✅ 匹配成功:歌曲《$songTitle》 - 艺术家:$artist - 库存位置:$location - 播放次数:{$row['play_count']}<br>";
    } else {
        echo "❌ 未找到匹配:歌曲《$songTitle》 - 艺术家:$artist<br>";
    }
}

// 关闭文件和数据库连接
fclose($fileHandle);
$conn->close();
?>

如果你的TXT是逗号分隔的CSV格式,把explode("\t", $line)改成用fgetcsv更安全:

while (($data = fgetcsv($fileHandle, 1000, ",")) !== false) {
    $songTitle = $data[0];
    $artist = $data[1];
    $location = $data[2];
    // 后续查询逻辑同上
}
关键注意事项
  • 数据一致性:歌曲标题和艺术家的拼写、空格、大小写要尽量一致,否则会匹配失败。如果有很多不一致的情况,可以考虑用模糊查询(比如LIKE),但精度会下降。
  • 编码问题:确保TXT文件和MySQL数据库的编码都是UTF-8,避免出现乱码。
  • 重复数据:如果两个数据源里有重复的「歌曲标题+艺术家」组合,要提前想好处理逻辑(比如取播放次数最高的,或者全部列出)。

内容的提问来源于stack exchange,提问作者Swift Bohanan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:16:44