【问题标题】:How do I make a function for mysql while我如何为mysql创建一个函数同时
【发布时间】:2010-12-12 18:24:38
【问题描述】:

MySQL

cat_id   cat_group    cat_name       cat_status
1        Vehicles     Cars           1
2        Vehicles     Motorcycles    1
3        Properties   Houses         1
4        Properties   Apartments     1
5        Electronics  Cameras        1
6        Electronics  Gadgets        1

HTML

  <select id="category" name="category">
    <optgroup label="Vehicles">
        <option value="1">Cars</option>
        <option value="2">Motorcycles</option>
    </optgroup>
    <optgroup label="Properties">
        <option value="3">Houses</option>
        <option value="4">Apartments</option>
    </optgroup>
    <optgroup label="Electronics">
        <option value="5">Cameras</option>
        <option value="6">Gadgets</option>
    </optgroup>    
  </select>

PHP

function cat_option()
{
  global $db;
}

问题

如何为类别循环创建 php 函数?所以在表单上我只是通过 cat_option() 调用它,结果将类似于 HTML

【问题讨论】:

  • 我们不为您构建它 - 您尝试了什么?
  • $db 是什么对象?你如何连接到数据库?
  • 没有 optgroup 是的。我坚持把它分组

标签: php mysql html loops


【解决方案1】:

您可以使用多维数组在一个查询中完成:

<?php

$opts = array();
# select all active categories
$qr = mysql_query('SELECT cat_id, cat_group, cat_name FROM categories WHERE cat_status = 1 ORDER BY cat_id ASC');
# go through all results
while ($qa = mysql_fetch_assoc($qr)) {
  $opts[$qa['cat_group']][$qa['cat_id']] = $qa['cat_name'];
  # e.g. $opts['Vehicles'][1] = 'Cars'
}

/*
# now your array looks like:
$opts = array(
  'Vehicles' => array(
    1 => 'Cars',
    2 => 'Motorcycles',
  ),
  'Properties' => array(
    3 => 'Houses',
    4 => 'Apartments',
  ),
  'Electronics' => array(
    5 => 'Cameras',
    6 => 'Gadgets',
  )
);
*/

?>
<!-- now output it -->
<select id="category" name="category">
<?php foreach (array('Vehicles', 'Properties', 'Electronics') as $label): ?>
  <optgroup label="<?php echo $label ?>">
  <?php foreach ($opts[$label] as $id => $name): ?>
      <option value="<?php echo $id ?>"><?php echo htmlspecialchars($name); ?></option>
  <?php endforeach; ?>
  </optgroup>
<?php endforeach; ?>
</select>

【讨论】:

  • 谢谢moeffju。如何获取从cat_group 捕获的foreach (array('Vehicles', 'Properties', 'Electronics') as $label 的动态数组
  • 只需使用foreach ($opts as $label =&gt; $opt) 遍历所有键。
【解决方案2】:
$opts[$qa['cat_group']][$qa['cat_id']] = $qa['cat_name'];

【讨论】:

    【解决方案3】:

    假设目录中的元素数量足够少。您必须首先使用 SQL 查询获取所有元素。

    然后您可以根据它们的 cat_group 值对这些元素进行排序。这样,相似类别的项目将放在一起。我假设您可以根据特定属性对对象集合应用排序。

    那么您需要做的就是遍历列表并根据需要创建新的 optgroup。

    【讨论】:

      【解决方案4】:

      您可能希望首先使用DISTINCT 查询来获取不同类型的cat_group。然后遍历那些创建你的optgroup's。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-25
        • 1970-01-01
        • 2012-09-28
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 2020-07-30
        相关资源
        最近更新 更多