我有一个博客类型的应用程序。它有带标签的文章。
表格 - 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
。
请帮我解决这个问题。谢谢
答案 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();