MySql-如何通过另一个表中的另一个列过滤列名

时间:2020-08-25 13:54:05

标签: mysql laravel laravel-query-builder

我有一个带有“ nick_name”列的“用户”表。
我还有另一个表'nick_name_master',其中有列:-ID,标题,图标。
理想情况下,与'user'和'nick_name_master'没有直接关系。因此,我无法使用联接获取nick_name_master.icon。

nick_name_master.title的值如下:-猫,狗,兔子等。
通过采用nick_name_master.title之一并附加一些随机数字(1-999)来设置user.nickname。

user.nick_name看起来像这样:-Rabbit514,Toucan12,Cat210等。

我想使用user.nick_name来获取nick_name_master.icon
当前代码正在使用这样的

foreach($posts as $post){
    $nick_name = $post->user->nick_name;
    $letters = preg_replace('/[^a-zA-Z]/', '', $nick_name);
    $nickname = resolve('nick-name')->getByTitle($letters);    
}

getByTitle()是这个

public function getByTitle($title)
{
    return $this->nickname->select('icon')->where('title',$title)->first();
}  

由于我的$ post变量具有另一个数据,并且我要按10条记录对它进行分页,因此我面临n + 1个问题。 因此,我想在计算$ post时添加此查询。

$listing = $this->question
->leftjoin('users as u', function ($join) {
            $join->on('questions.user_id','u.id')
                ->where('u.deleted_at',NULL);
        })
->select('questions.id','user_id','questions.title','u.full_name')
->groupBy('questions.id')
->where('questions.is_active','Y')
->where('questions.is_reported','N'); 
return $listing;

这是从$ post查询中提取的查询的一部分。

是否有可能加入用户表和nick_name_master表?
或者只是使用select DB Raw选择nick_name_master.icon也可以。

我已经在select中尝试了这段代码(我知道这是错误的,我对DB原始查询没有太多经验)

DB::raw("select * from nick_name_master as nm where nm.title LIKE +'%'+u.nick_name+'%'")   

任何帮助将不胜感激。谢谢!

0 个答案:

没有答案