【问题标题】:Get values from database on the basis of values in array根据数组中的值从数据库中获取值
【发布时间】:2012-11-19 02:11:55
【问题描述】:

我需要根据数组中的值填充下拉列表。 这是我的代码。

假设用户的 id 为 1,2,3。然后必须选择这些 id 对应的 table_group 并显示在下拉列表中。也不应该有任何重复值,就像在这种情况下 id 2 和 3 值 23 重复一样,在这种情况下,只会采用一个值。这里的 $table_id 是从 USERS TABLE 中获取的。

     $mod = explode(',',$table_id);
     $mod = array('1','2','3')
     $res = array();

     function addItems($items, $arr) {
        foreach ($items as $value) {
            if (!in_array($value, $arr)) {
                $arr[] = $value;
            }
        }

        return $arr;
     }

     $res = array();
     for ($i = $mod[0]; $i <= end($mod); $i++) {
        $query = $this->db->query("SELECT table_group FROM group where table_id = '$i'");
        $row = $query->row();
        $grp = $row->table_group;
        $group = explode(',', $grp);
        $res = addItems($group, $res);
     }
     return $res;

它实际上可以工作,但是这里发生的错误是假设用户选择了 1,2,4。在此仅必须选择 table_group 值 1,2 和 4。但是使用我的代码,选择了 1,2,3,4 的值。如果它是 3、4、5 或 2、3、4 等,那么代码就可以正常工作。我该如何解决这个错误? 只需修改代码即可。

【问题讨论】:

  • 这是一个糟糕的数据库设计。您应该通过normalizing 设计开始解决您的“问题”,之后(通常)这些类型的问题会消失或至少变得更简单
  • @Marc B:你能说得更具体点吗?你的意思是让行不包含相同的值。
  • 他的意思是你不应该在字段中存储逗号分隔的值,并期望能够有效地搜索它们。 forums.phpfreaks.com/topic/…
  • @Zane Edward Dockery:如果我们用逗号分隔存储,是否可以使用explode函数将其转换为数组格式
  • 理论上,是的,你可以这样做......但这样做你会创建冗余代码。想象一下为某家公司工作,而你的工作是搜索记录。你的老板没有让你访问数据库,而是递给你 99 页的文件,上面有数百人的名单。然后,您会被要求在他们最后的付款日期之前安排好他们。这很容易做到,但需要做很多工作......换句话说,当您已经可以使用这些记录时,如果数据库已正确规范化,那么您正在让 PHP 做更多的工作。

标签: php arrays codeigniter populate


【解决方案1】:

改变,

for ($i = $mod[0]; $i <= end($mod); $i++) {
$query = $this->db->query("SELECT table_group FROM group where table_id = '$i'");

for ($i = 0; $i < count($mod); $i++) {
$query = $this->db->query("SELECT module_group FROM module_group where module_id = '$mod[$i]'");

【讨论】:

    【解决方案2】:

    不管别人写了什么;

    您有 2 个查询可以放入关联的 ID 与 GROUP 数组中:

    idVsgroups array
    [1] = array(value11, value12, value 13)
    [2] = array(value21, value 22, value 23)
    [3] = array(value31, value 23)
    [4] = array(value 41, value 13)
    [5] = array(value 51)
    

    之后,如果选择了 1、2 和 3,请执行以下操作:

    foreach ($selected as $key) { $result[] = $selected[$key] }
    

    这会将所有内容放入 $selected - 真的很容易吗?之后尝试使用 array_unique 或 do what this guys already written for you

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 2019-12-03
      • 2021-08-09
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      相关资源
      最近更新 更多