【问题标题】:Multi level category in multiselect of CodeIgniter with single table单表CodeIgniter多选中的多级类别
【发布时间】:2017-02-16 07:33:20
【问题描述】:

我正在尝试从 $form->multiselect() 创建一个多级类别。
下面是我的表结构。

| id | parent |  name   |
|----|--------|---------|
| 10 |      0 | 'menu1' |
| 12 |     10 | 'menu2' |
| 13 |     10 | 'menu3' |
| 14 |      0 | 'menu4' |

结果是

+----+---------+
| id |  name   |
+----+---------+
| 10 | 'menu1' |
| 12 | 'menu2' |
| 13 | 'menu3' |
| 14 | 'menu4' |
+----+---------+


在选择元素中显示的值和名称显示的 id。

<select>
  <option value='10'>menu1</option>
  <option value='12'>menu2</option>
  <option value='13'>menu3</option>
  <option value='14'>menu4</option>
</select>


没有显示层次结构。我想在下面显示。

<select>
      <option value='10'>menu1</option>
      <option value='12'>menu1 -> menu2</option>
      <option value='13'>menu1 -> menu3</option>
      <option value='14'>menu4</option>
    </select>

我该怎么办?
我想操纵 $form_multiselect() 的结构。

【问题讨论】:

标签: php arrays codeigniter


【解决方案1】:

我假设您在顶部列出的表格按照您获取的格式在数据库中...如果您是这样尝试的(您没有发布表格名称,所以您将必须自己做):

$result = $this->db->select('CASE WHEN b.name IS NOT NULL THEN CONCAT(a.name, ,\' -> \' b.name) ELSE a.name END AS option')
    ->from('yourtable a')
    ->join('yourtable b', 'a.parent = b.id', 'left')
    ->get()->result();

如果您的问题误导了我,我深表歉意……没有什么好继续的……

【讨论】:

  • 我使用activerecord获取数据
  • 这不应该在数据库层完成。如果叶子也会有另一个叶子怎么办。你能想象这个有 10 个邻接级别的查询会有多大吗?在大多数情况下,足以获取所有行,然后生成 foreach 并将它们分组到看起来像 $menu = ['parent' =&gt; 'menu1', 'child' =&gt; ['menu2', 'menu3', 'etc.']] 的数组中。这是最简单的方法,另一种方法是同时使用更智能但更难的树。请看这篇博文mikehillyer.com/articles/managing-hierarchical-data-in-mysql
  • 在 MySQL 中,当然。我一直使用的 SQL Server,只需使用递归 cte 构建它。无论如何......我已经提供了一个解决方案,请随时提供您自己的解决方案
  • 稍等。尝试使用它。
  • 多级类别多选 CodeIgniter github.com/hamedhossani/…
猜你喜欢
  • 2014-02-12
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
相关资源
最近更新 更多