php - 从mysql制作html选项列表的最有效方法?
问题描述
我可以从我的表中检索最少超过5000 条记录的记录,我有四种方法可以做到这一点,我不知道哪种方法和为什么适合我要求的工作,如果是较少的记录,哪种方法最好:(查询)
#---- Rows
SELECT
a.`id`,
a.`content`
FROM
`docs` a;
我对每一行使用while() 循环:
while ($row = $rows->fetch()) {
echo "<option value=\"{$row['id']}\">{$row['content']}</option>";
}
#---- Group
SELECT
GROUP_CONCAT(
a.`id`,
".",
a.`content`
) AS `options`
FROM
`docs` a;
我使用explode() + foreach() 循环 (内容自然不允许在其文本中包含“.”):
foreach (explode(",", $options) as $option) {
$option = explode(".", $option); //[0]: id, [1]: content
echo "<option value=\"{$option[0]}\">{$option[1]}</option>";
}
#---- HTML Rows
SELECT
CONCAT("<option value=\"",a.`id`,"\">",a.`content`,"</option>") AS `option`
FROM
`docs` a;
我在查询中应用 html,然后使用while() 循环:
while ($row = $rows->fetch()) {
echo $row;
}
#---- HTML Group
SELECT
GROUP_CONCAT("<option value=\"",a.`id`,"\">",a.`content`,"</option>" SEPARATOR "")
FROM
`docs` a;
这里一切都已经在查询中进行了打印:
echo $rows->fetch();
解决方案
我会从表面上考虑您客户的要求,即使如果我不得不使用包含 5000 个元素的下拉菜单会让我发疯。
您可能会考虑使用HTML5 datalist 元素来稍微改进一下这个 UX。
从 php 的角度来看,您生成此代码的方式可能无关紧要。然而,从 MySQL 的角度来看,使用while
循环的更简单的查询——你的首选——更好。为什么?
如果使用 GROUP_CONCAT() 生成长字符串,则需要设置。读这个。MySQL 和 GROUP_CONCAT() 最大长度 一个聪明的开发者,尤其是面对一个奇怪的需求时,会保持简单。
逐行处理中等大小的结果集可以减少 php 程序和 MySQL 服务器中的 RAM 需求。
当您或某人需要更好地改善这种用户体验时,它会更容易阅读。
推荐阅读
- kubernetes - 需要帮助通过 helm 更新 loki 堆栈
- cryptography - 通过解密私钥,使用 pgp 密钥在线验证物理项目
- flutter - Flutter Provider:对 List 的更改不会传播
- javascript - 使用自定义步骤创建角度材质滑块范围
- docker - 如何在 Docker 容器中挂载 Codespace 的工作区?
- python - 如何在 Python 中的 Jupyter Notebook 中安装 Geo Pandas 包?所有解决方案都不起作用
- javascript - 在 Storybook 中排序:可以强制嵌套故事的顺序吗?
- amazon-web-services - AWS Cloudwatch - 如何将变量传递给小部件的标题
- zenity - 需要帮助使用“--html”标志编写“yad”应用程序
- git - 为什么在 Visual Studio Code 中显示 storage.json、state.vscdb 和 data_1 等文件的更改?