Py学习  »  DATABASE

从mysql生成html选项列表的最有效方法是什么?

ijfierjf jeifjerij • 3 年前 • 1336 次点击  

我可以从我的数据库中检索记录 桌子 在上面 5000记录 最小,我有四种方法可以做到,我不知道哪一种和为什么最适合我要求的工作,如果是较小的记录,哪一种最好: (Queries)

#---- 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();
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131492
 
1336 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Subhashis Pandey
Reply   •   1 楼
Subhashis Pandey    3 年前

您可以使用JQuery select2并对其应用搜索方法,该方法将通过AJAX调用获取数据。我使用JSON填充select。我在这里添加示例代码,根据您的要求进行修改。

示例HTML

                <select name="ItemID" id="ItemID">
                    <option value="0">--</option>
                </select>

相关javascript

        $("#ItemID").select2({
            minimumInputLength:3,
            ajax: {
                url: 'json/getItemList.php',
                dataType: 'json',
                data: function (params) {
                    return { 
                        Src: params.term
                    };
                },
             processResults: function (data) {
                    var items = [];
                    for (var i = 0; i < data.length; ++i) {
                        items.push({id: data[i][0], text: data[i][1]});
                    }
                    return {
                        results: items,
                    }
             },                  
            },
        });

相关PHP代码

<?php

$Src            = "";
if(isset($_REQUEST['Src']))
    $Src        = $_REQUEST['Src'];

// Write your own code to fetch data, and replace the below line 
//$oList        = $mdb->getItemListJSON3($tcmp->getCompanyID(), $Src, 2);

$jsonStr    =   json_encode($oList);    

print($jsonStr);

?>
O. Jones
Reply   •   2 楼
O. Jones    3 年前

我会从表面上看你客户的要求,即使如果我不得不使用5000个元素的下拉菜单,我也会发疯。

你可以考虑使用 HTML5 datalist element 来改进一下这个用户体验。

从php的角度来看,生成这段代码的方式可能并不重要。然而,从MySQL的角度来看,使用 while loop——你的第一选择——更好。为什么?

  • 如果使用组_CONCAT()生成长字符串,则需要设置。读这个。 MySQL and GROUP_CONCAT() maximum length 一个聪明的开发人员,尤其是在面对一个奇怪的需求时,会保持它的简单。

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

  • 当你或其他人需要更好地利用这种用户体验时,阅读起来会更容易。