PHP-WHERE联接中的MYSQL未知列 [英] PHP - MYSQL Unkown Column in WHERE Join

查看:39
本文介绍了PHP-WHERE联接中的MYSQL未知列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用CodeIgniter和数据表生成的查询.

I have a generated query using CodeIgniter and datatables.

查询如下:

SELECT `tbl_leads`.*, t2`.`username` as `namexx`
FROM `tbl_leads`
JOIN `tbl_users` AS `t2` ON `t2`.`user_id` = JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(tbl_leads.permission), '$[0]'))
WHERE   (
`tbl_leads`.`lead_name` LIKE '%d%' ESCAPE '!'
OR  `tbl_leads`.`contact_name` LIKE '%d%' ESCAPE '!'
OR  `tbl_leads`.`email` LIKE '%d%' ESCAPE '!'
OR  `tbl_leads`.`phone` LIKE '%d%' ESCAPE '!'
OR  `tbl_leads`.`lead_status_id` LIKE '%d%' ESCAPE '!'
OR  `tbl_leads`.`permission` LIKE '%d%' ESCAPE '!'
OR  `t2`.`username` LIKE '%d%' ESCAPE '!'
OR  `tbl_leads`.`linkedin` LIKE '%d%' ESCAPE '!'
OR  `tbl_leads`.`leads_id` LIKE '%d%' ESCAPE '!'
 )
AND `converted_client_id` = '0'
ORDER BY `leads_id` DESC
 LIMIT 20

此查询是根据POST搜索请求生成的.

This query gets generated on a POST request for search.

如果您还没有猜到,我会得到

If you haven't already guessed, I'm getting

"where子句"中的未知列"t2.username"

Unknown column 't2.username' in 'where clause`

因为在where查询中无法识别列别名( tbl_users.username 也不会更改).

because the column alias isn't recognized in the where query(neither does tbl_users.username if it would be to change it).

我正在通过next(数据表模型)生成它:

I'm generating it through the next(datatables model):

    if ($this->table == 'tbl_leads') {    
      $this->db->select ('tbl_leads.*, t2.username as namexx'); 
      $this->db->join("tbl_users AS t2", "t2.user_id = JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(tbl_leads.permission), '$[0]'))", "LEFT"); 
    }
    $query = $this->db->get();

我还编辑了搜索功能,以便按如下方式获取表指针(我知道这不是一个好习惯,而且是多余的):

I also edited the search function so i get the table pointers as follows(I know its not a good practice and redundant):

        foreach ($this->column_search as $item) // loop column

    {

        if ($_POST['search']['value']) // if datatable send POST for search

        {

            if ($i === 0) // first loop

            {

                $this->db->group_start(); // open bracket. query Where with OR clause better with bracket. because maybe can combine with other WHERE with AND.
                    if($this->table=='tbl_leads'){
                    if( $item=='namexx'){
                    $this->db->like('tbl_users.username', $_POST['search']['value']);
                        }else{
                        $this->db->like($this->table.'.'.$item, $_POST['search']['value']);

                        }
                    }else{
                    $this->db->like($item, $_POST['search']['value']);

                }

            } else {
                if($this->table=='tbl_leads'){
                if( $item=='namexx'){
                $this->db->or_like('tbl_users.username', $_POST['search']['value']);

                }else{
                $this->db->or_like($this->table.'.'.$item, $_POST['search']['value']);
                }
                }else{
                $this->db->or_like($item, $_POST['search']['value']);

                }

            }

            if (count($this->column_search) - 1 == $i) //last loop

                $this->db->group_end(); //close bracket

        }

        $i++;

    }

推荐答案

修改查询,从连接语句中删除 t2 别名,如下所示:

Modify your query, remove the t2 alias from the join statements like this :

if ($this->table == 'tbl_leads') {
    $this->db->select ('tbl_leads.*, tbl_users.username as namexx');
    $this->db->join("tbl_users", "tbl_users.user_id = JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(tbl_leads.permission), '$[0]'))", "LEFT");
}
$query = $this->db->get();

这篇关于PHP-WHERE联接中的MYSQL未知列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆