首页 > 解决方案 > 从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();

标签: phpmysqlquery-optimization

解决方案


我会从表面上考虑您客户的要求,即使如果我不得不使用包含 5000 个元素的下拉菜单会让我发疯。

您可能会考虑使用HTML5 datalist 元素来稍微改进一下这个 UX。

从 php 的角度来看,您生成此代码的方式可能无关紧要。然而,从 MySQL 的角度来看,使用while循环的更简单的查询——你的首选——更好。为什么?

  • 如果使用 GROUP_CONCAT() 生成长字符串,则需要设置。读这个。MySQL 和 GROUP_CONCAT() 最大长度 一个聪明的开发者,尤其是面对一个奇怪的需求时,会保持简单。

  • 逐行处理中等大小的结果集可以减少 php 程序和 MySQL 服务器中的 RAM 需求。

  • 当您或某人需要更好地改善这种用户体验时,它会更容易阅读。


推荐阅读