使用RLIKE进行Laravel查询以匹配字符串中的确切单词

时间:2017-02-12 19:01:54

标签: laravel laravel-5.3

我有一个博客类型的应用程序。它有带标签的文章。

表格 - tags

|id|tag        |
----------------
|1 |css        |
|2 |css-library|
|3 |html       |
|4 |pre-css    |
|5 |scss    |

表格 - articles

|id|tags                  |article|
-----------------------------------
|1 |css, html, javascript |xxxxxxx|
|2 |css-library, scss     |xxxxxxx|
|3 |html, css, bootstrap  |xxxxxxx|

我有以下查询来查找

$result = DB::table('tags')
            ->leftjoin('articles', 'articles.tags', 'rlike', 'tags.tag')
            ->selectRaw('tags.tag, count(articles.id) as total')->where('articles.public', 1)
            ->groupBy('tags.tag')
            ->orderBy('total', 'desc')
            ->get();

当它返回标签数组及其总使用量时。我弄错了数据。例如,在标记css的情况下,我得到3,而我应该2。查询将css-library计为css

请帮我解决这个问题。谢谢

1 个答案:

答案 0 :(得分:0)

假设你的数据库是mySQL,试试这个:

$result = DB::table('tags')
    ->leftjoin('articles', 'tags.tag', 'rlike', DB::raw("concat('(^|,)', articles.tags, '(,|$)')"))
    ->selectRaw('tags.tag, count(articles.id) as total')->where('articles.public', 1)
    ->groupBy('tags.tag')
    ->orderBy('total', 'desc')
    ->get();