Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да напиша това (ляво съединение, подзаявка) в Laravel 5.1?

За да използвате подзаявки с конструктора на заявки на Laravel, трябва да го добавите към съединението, както следва:

->leftJoin(DB::raw("(SELECT [...]) AS p"), 'p.post_id', '=', 'posts.id')

Също така е по-добре да създадете псевдоним за изчисляеми полета, както направихте във вашата необработена заявка:

COUNT(*) AS count

Въпреки тези промени, освен ако не греша, можете да започнете, като опростите заявката си. Премахнете подзаявките по този начин:

SELECT
  p.id,
  p.title,
  p.created_at,
  p.updated_at,
  u.name,
  COUNT(c.id) AS comments_count,
  COALESCE(SUM(pl.status), 0) AS status_sum
FROM
  posts p
LEFT OUTER JOIN
  users u
ON 
  u.id = p.user_id
LEFT OUTER JOIN 
  postslikes pl
ON 
  pl.post_id = p.id
LEFT OUTER JOIN 
  comments c
ON 
  c.post_id = p.id 
ORDER BY 
  comments_count DESC
GROUP BY
  p.id

След това, с тази нова заявка, можете да използвате Laravel, за да я създадете:

DB::table('posts')
  ->select([
    'posts.id',
    'posts.title',
    'posts.created_at',
    'posts.updated_at',
    'users.name',
    DB::raw('COUNT(comments.id) AS comments_count'),
    DB::raw('COALESCE(SUM(postslikes.status), 0) AS status_sum'),
  ])
  ->leftJoin('users', 'users.id', '=', 'posts.user_id')
  ->leftJoin('comments', 'comments.post_id', '=', 'posts.id')
  ->leftJoin('postslikes', 'postslikes.post_id', '=', 'posts.id')
  ->orderBy('comments_count', 'DESC')
  ->groupBy('posts.id')
  ->get();

Имайте предвид, че предполагам, че имате колона с име id във вашите comments таблица, която е първичен ключ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pymysql fetchall() резултати като речник?

  2. while ($row =mysql_fetch_array($result)) - колко цикъла се изпълняват?

  3. Solr - DIH дефинира и импортира поле много към много

  4. Как работи функцията SUBSTR() в MySQL

  5. Има ли лесен начин за конвертиране на MySQL данни в главни букви?