2017-02-12 3 views
0

Ich habe eine Blog-App. Es hat Artikel mit Tags.Laravel Abfrage mit RLIKE das genaue Wort aus einer Zeichenfolge

Tabelle - tags

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

Tabelle - articles

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

ich die unten Abfrage haben

$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(); 

, um herauszufinden, wenn es um das Array von Tags mit seinen insgesamt zurück benutzen. Ich bekomme falsche Daten. Zum Beispiel im Fall des Tags css bekomme ich 3, während ich 2 bekommen sollte. Abfragezählung css-library als css.

Bitte helfen Sie mir, das zu beheben. Danke

+0

warum Sie keine "article_tag" Tabelle verwenden? – sam12

+0

meinst du? Ich habe keine andere Tabelle ... –

+0

Ich meine eine Viele-Beziehung: https://laravel.com/docs/5.4/eloquent-relationships#many-to-many – sam12

Antwort

0

Angenommen, Ihre DB mySQL, versuchen Sie dies:

$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

es gibt mir schlechte Ergebnisse. nicht einmal in der Nähe der einen, den ich habe :( –

+0

versuche meinen aktualisierten Beitrag – Paras

Verwandte Themen