社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

ijfierjf jeifjerij • 3 年前 • 1379 次点击  

我可以从我的数据库中检索记录 桌子 在上面 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
 
1379 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Subhashis Pandey
Reply   •   1 楼
Subhashis Pandey    4 年前

您可以使用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    4 年前

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

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

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

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

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

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