php - 带有while循环的mysql节点js动态数组
问题描述
我在php中有以下代码,效果很好
if ($result = $mysqli->query("SELECT t.*, GROUP_CONCAT(c.category) categories, GROUP_CONCAT(k.keyword) keywords FROM dataclayTemplates t LEFT JOIN dataclayCategoryLink cl JOIN dataclayCategories c ON cl.categoryId=c.id ON t.id=cl.templateId LEFT JOIN dataclayKeywordLink kl JOIN dataclayKeywords k ON kl.keywordId=k.id ON t.id=kl.templateId GROUP BY t.id"))
{
while($row = $result->fetch_array(MYSQLI_ASSOC)) {
if($row["categories"] == null) {
$row["categoryArray"] = [];
} else {
$row["categoryArray"] = array_unique(explode(",",$row["categories"]));
}
unset($row["categories"]);
if($row["keywords"] == null) {
$row["keywordArray"] = [];
} else {
$row["keywordArray"] = array_unique(explode(",",$row["keywords"]));
}
unset($row["keywords"]);
$templateArray[] = $row;
}
}
$result->close();
我想在nodejs中使用mysql做同样的事情(在每个结果的末尾添加一个categoryArray数组,并用每个结果类别中的类别填充它)我有这个节点js代码和一个拉数据就好了我只是需要构建categoryArray和keywordArray。
import express from 'express';
import connection from '../index.js'
const router = express.Router();
router.get('/allTemplates', function (req, res) {
let queryString="SELECT t.*, GROUP_CONCAT(c.category) categories, GROUP_CONCAT(k.keyword) keywords FROM dataclayTemplates t LEFT JOIN dataclayCategoryLink cl JOIN dataclayCategories c ON cl.categoryId=c.id ON t.id=cl.templateId LEFT JOIN dataclayKeywordLink kl JOIN dataclayKeywords k ON kl.keywordId=k.id ON t.id=kl.templateId GROUP BY t.id";
let query = connection.query(queryString, (error, result) => {
if(error) {throw error;}
res.json(result);
})
});
module.exports = router;
下面是我尝试在 nodejs 中执行此操作,但它不起作用。
import express from 'express';
import connection from '../index.js'
const router = express.Router();
router.get('/allTemplates', function (req, res) {
let queryString="SELECT t.*, GROUP_CONCAT(c.category) categories, GROUP_CONCAT(k.keyword) keywords FROM dataclayTemplates t LEFT JOIN dataclayCategoryLink cl JOIN dataclayCategories c ON cl.categoryId=c.id ON t.id=cl.templateId LEFT JOIN dataclayKeywordLink kl JOIN dataclayKeywords k ON kl.keywordId=k.id ON t.id=kl.templateId GROUP BY t.id";
let query = connection.query(queryString, (error, result) => {
if(error) {throw error;}
let categoryArray=[];
result.forEach(function(template){
template.concat(categoryArray);
template.categories.forEach(function(category) {
if(template.categories!=null){
template.categoryArray.push(category);
}
});
});
})
});
module.exports = router;
任何帮助都会非常感谢。
解决方案
我不得不稍微修改我的代码,但这就是我让它工作的方式。希望它可以帮助别人。快乐编码!
router.get("/", async (req, res, next) => {
const data = {};
const sqlStatement =
"SELECT t.*, GROUP_CONCAT(DISTINCT c.category) categories, GROUP_CONCAT(DISTINCT k.keyword) keywords FROM dataclayTemplates t LEFT JOIN dataclayCategoryLink cl JOIN dataclayCategories c ON cl.categoryId=c.id ON t.id=cl.templateId LEFT JOIN dataclayKeywordLink kl JOIN dataclayKeywords k ON kl.keywordId=k.id ON t.id=kl.templateId GROUP BY t.id;";
try {
data.categories = await database.query("SELECT * FROM dataclayCategories");
data.keywords = await database.query("SELECT * FROM dataclayKeywords");
data.templates = await database.query(sqlStatement);
for (let i = 0; i < data.templates.length; i++) {
const current = data.templates[i];
if (current.categories) {
current.categories = current.categories.split(",");
}
if (current.keywords) {
current.keywords = current.keywords.split(",");
}
}
res.json(data);
} catch (error) {
next(error);
}
});
推荐阅读
- regex - 如何使用 HTML5 验证日期模式
- c# - 在 iis express 中运行 asp.net core mvc 项目时遇到问题
- mysql - 如果日期不存在,则获取给定日期的最后一行
- javascript - 如果我在对话框中打开 ASP RadioButtons,服务器端 OnCheckedChanged 不起作用
- php - mpdf 生成的文件总是要求在 acrobat 中关闭之前保存更改
- python - 使用 xlsxwriter 将 Excel 中的一组单元格的边框更改为粗框边框
- oracle - Oracle:是否可以修剪字符串并计算出现次数,然后插入新表?
- c# - 遗传算法:为什么我的随机种群适应度值相同?
- angular - 部署在同一 Tomcat 服务器上的两个应用程序之间的会话共享
- mysql - 尝试从 docker 容器连接到本地 mysql 数据库时连接被拒绝