Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menulis ini (gabung kiri, subquery ) di Laravel 5.1?

Untuk menggunakan subqueries dengan pembuat kueri Laravel, Anda harus menambahkannya ke join sebagai berikut:

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

Juga lebih baik membuat alias untuk bidang terhitung, seperti yang Anda lakukan dalam kueri mentah:

COUNT(*) AS count

Terlepas dari perubahan ini, kecuali saya salah, Anda dapat memulai dengan membuat kueri Anda lebih sederhana. Jatuhkan subkueri, dengan cara ini:

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

Kemudian, dengan kueri baru ini, Anda dapat menggunakan Laravel untuk membangunnya:

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

Perhatikan bahwa saya berasumsi Anda memiliki kolom bernama id di comments . Anda tabel yang merupakan kunci utama.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Codeigniter - Model Akses Dan Basis Data pada Perutean

  2. Apakah ada implementasi CachedRowSet yang bagus selain yang dimiliki Sun?

  3. Tabel tidak memiliki kunci utama

  4. Mesin penyimpanan untuk meja tidak mendukung perbaikan. InnoDB atau MyISAM?

  5. Menduplikasi tabel MySQL, indeks, dan data