我对创建自己的项目和SQL很陌生,但我对拥有一个"排名"列感到问题,该列将根据"时间"列生成特定数据行的排名.我正在制作一个全栈CRUD数据库,它从mysql数据库拉到快速前端,到目前为止,我似乎不知道如何执行"搜索"函数来返回其中的行名称=?使用ROW_$函数时从用户输入.我仍然认为,与每次想要查找搜索结果时运行ROW_$查询相比,拥有完全独立的列是理想的 Select ,但我不知道该如何做到这一点.
到目前为止我的搜索功能如下:
async searchByName(name) {
try{
const response = await new Promise((resolve, reject) => {
const query = "SELECT *, ROW_NUMBER() OVER (ORDER BY time) rn FROM medley_relay; SELECT * FROM medley_relay WHERE name = ?;";
connection.query(query, [name], (err, results) => {
if (err) reject(new Error(err.message));
resolve(results);
})
});
console.log(response);
return response;
} catch (error) {
console.log(error);
}
}
它是这样叫的:
const {name} = request.params;
const db = dbService.getDbServiceInstance();
const result = db.searchByName(name);
result
.then(data => response.json({data : data}))
.catch(err => console.log(err));
console.log(result);
})
并发送到前端,并附上以下内容:
searchBtn.onclick = function() {
const searchValue = document.querySelector('#search-input').value;
fetch('http://localhost:5000/search/' + searchValue)
.then(response => response.json())
.then(data => loadHTMLTable(data['data']));
}
加载HTMLTable是
const table = document.querySelector('table tbody');
console.log(data);
if (data.length === 0) {
table.innerHTML = "<tr><td class='no-data'>No Data</td><td class = 'no-data'colspan='5'>No Data</td></tr>";
return;
}
let tableHtml = "";
data.forEach(function ({id, name, time, date, rn}) {
tableHtml += "<tr>";
tableHtml += `<td>${rn}</td>`;
tableHtml += `<td>${name}</td>`;
tableHtml += `<td>${time}</td>`;
tableHtml += `<td>${new Date(date).toLocaleDateString()}</td>`;
tableHtml += `<td><button class="delete-row-btn" data-id=${id}>Delete</td>`;
tableHtml += `<td><button class="edit-row-btn" data-id=${id}>Edit</td>`;
tableHtml += "</tr>";
});
table.innerHTML = tableHtml;
}
其中,我在我的Web应用程序上将搜索到的名称作为html元素输入.
我得到的只是所有元素的未定义表,当我try console.log时,我得到的响应:
[
RowDataPacket {
id: 15,
name: 'Corning',
time: '01:40:15',
date: 2024-04-10T04:00:00.000Z,
rn: 1
},
RowDataPacket {
id: 16,
name: 'Binghamton',
time: '01:52:42',
date: 2024-04-02T04:00:00.000Z,
rn: 2
}
],
[
RowDataPacket {
id: 16,
name: 'Binghamton',
time: '01:52:42',
date: 2024-04-02T04:00:00.000Z
}
]
]
如果这真的很容易,我再次道歉,因为这是我第一次使用SQL或PHPmyadmin,但能够有一个专用列来作为行的编号,当添加或删除条目时自动刷新将是很棒的.到目前为止,我发现的所有其他事情都依赖于ROW_$,它没有设置永久列,至少对我来说没有,这不会起作用,因为我的"排名"最终在我的表中未定义.