2017-02-12 31 views
0

我有一個博客類型的應用程序。它包含帶有標籤的文章。Laravel用RLIKE查詢以匹配字符串中的確切單詞

表 - 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-librarycss

請幫我解決這個問題。謝謝

+0

你爲什麼不使用 「article_tag」 表?您是指 – sam12

+0

?我沒有任何其他表... –

+0

我的意思是一個manytomany關係︰https://laravel.com/docs/5.4/eloquent-relationships#many-to-many – sam12

回答

0

假設你的DB是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(); 
+0

它給了我不好的結果。甚至沒有接近我已經:( –

+0

嘗試我更新的帖子 – Paras

相關問題