生成独特的Codeigniter 3 && MySQL

gdfgdfg

我需要使用以下代码根据用户输入生成唯一的子弹:

public function create_slug($id, $name){

    $count = null;
    $name = url_title($name);
    while(true) {
        $this->db->select('id');
        $this->db->where('id !=', $id);
        $this->db->where('slug', $name);
        $query = $this->db->get('users');
        if ($query->num_rows() == 0) {
            break;
        } else {
            $name .= '-' . (++$count);
        }
    }
    return $name;
}

它会选择处理该子弹($name)的所有内容,但要选择它自己的子弹。第一次用户输入的结果为123slug 123对于第二个相同的输入,子句是123-1,但是带有相同文本的第三个输入是带有result的123-1-2,这不是我想要的。

我尝试了另一种方式:

public function create_slug($id, $name){
    $count = null;
    $name = url_title($name);
    $this->db->select('id');
    $this->db->where('id !=', $id);
    $this->db->where('slug', $name);

    $query = $this->db->get('users');

    if($query->num_rows()){
        $count = '-' . ($query->num_rows() + 1);
    }
    return $name . $count;
}

在这里,是相同的查询,但count行+ 1。对于第一123蛞蝓是123; 第二123,sl 123-2; 第三123,再塞子123-2,这不是唯一的。

如何创建基于某些用户输入且唯一的子弹,如果有值的弹子name,则next将是name-1,如果再次是,next将是name-2等。

保罗·D

您需要根据原始名称创建一个临时的slug_name,并测试该slug_name。失败时,根据原始名称重新创建新的slug_name。成功时(退出循环),返回修改后的slug_name。

public function create_slug($id, $name)
{
    $count = 0;
    $name = url_title($name);
    $slug_name = $name;             // Create temp name
    while(true) 
    {
        $this->db->select('id');
        $this->db->where('id !=', $id);
        $this->db->where('slug', $slug_name);   // Test temp name
        $query = $this->db->get('users');
        if ($query->num_rows() == 0) break;
        $slug_name = $name . '-' . (++$count);  // Recreate new temp name
    }
    return $slug_name;      // Return temp name
}

或者使用count_all_results这样。删除了您的ID检查,以及我认为该子弹对于整个表来说必须是唯一的。

public function create_slug($id, $name)
{
    $count = 0;
    $slug_name = $name = url_title($name);
    while(true) 
    {
        $this->db->from('users')->where('slug', $slug_name);
        if ($this->db->count_all_results() > 0) break;
        $slug_name = $name . '-' . (++$count);
    }
    return $slug_name;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章