Php Laravel 5-检索数据库中每个类别的前4条记录

Php Laravel 5-检索数据库中每个类别的前4条记录,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有一个画廊图片数据库表,按以下分类: “公司”、“食品”、“公园”、“派对”、“游乐设施”、“学校”、“场地” 每个图像都指定了其中一个类别 我正在构建一个主图库页面,在该页面中,我希望显示数据库中每个类别的最新4幅图像 有人能帮我建立查询吗 查询如下所示开始: Bugz\GalleryImage:: 表格结构 Schema::create('gallery_images', function (Blueprint $table) { //set the table

我有一个画廊图片数据库表,按以下分类:

“公司”、“食品”、“公园”、“派对”、“游乐设施”、“学校”、“场地”

每个图像都指定了其中一个类别

我正在构建一个主图库页面,在该页面中,我希望显示数据库中每个类别的最新4幅图像

有人能帮我建立查询吗

查询如下所示开始:

Bugz\GalleryImage::
表格结构

Schema::create('gallery_images', function (Blueprint $table) {

            //set the table engine:
            $table->engine = 'InnoDb';

            //define an auto-incrementing primary key:
            $table->increments('id');

            //define the general fields:
            $table->enum('gallery', array('corporate', 'food', 'park', 'parties', 'rides', 'schools', 'venue'))->default('corporate');
            $table->string('title');
            $table->string('content')->nullable()->default(null);

            //define the audit fields:
            $table->timestamps();
            $table->softDeletes();

        });
我还没有足够的经验来编写更复杂的查询

多谢各位

这里有一个方法

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(image_id INT NOT NULL ATO_INCREMENT PRIMARY KEY
, category ENUM('corporate', 'food', 'park', 'parties', 'rides', 'schools', 'venue') NOT NULL
);

INSERT INTO my_table (category) VALUES
('corporate'), 
('food'), 
('park'), 
('parties'), 
('rides'), 
('schools'), 
('venue'),
('rides'), 
('schools'), 
('venue'),
('food'), 
('park'), 
('parties'), 
('rides'), 
('corporate'), 
('food'), 
('park'), 
('food'), 
('park'), 
('parties'), 
('rides'), 
('food'), 
('park'), 
('food'), 
('corporate'), 
('rides'), 
('corporate'), 
('parties'), 
('rides'), 
('corporate'), 
('food'),
('schools'), 
('venue'),
('venue'),
('food'), 
('park'), 
('parties')
;
中间结果

SELECT x.*
     , COUNT(y.image_id) temp_ranks_for_y
  FROM my_table x 
  JOIN my_table y   
    ON y.category = x.category 
   AND y.image_id >= x.image_id 
 GROUP 
    BY x.image_id;
+----------+-----------+-------------------+
| image_id | category  | temp_ranks_for_y  |
+----------+-----------+-------------------+
|        1 | corporate |                 5 |
|        2 | food      |                 8 |
|        3 | park      |                 6 |
|        4 | parties   |                 5 |
|        5 | rides     |                 6 |
|        6 | schools   |                 3 |
|        7 | venue     |                 4 |
|        8 | rides     |                 5 |
|        9 | schools   |                 2 |
|       10 | venue     |                 3 |
|       11 | food      |                 7 |
|       12 | park      |                 5 |
|       13 | parties   |                 4 |
|       14 | rides     |                 4 |
|       15 | corporate |                 4 |
|       16 | food      |                 6 |
|       17 | park      |                 4 |
|       18 | food      |                 5 |
|       19 | park      |                 3 |
|       20 | parties   |                 3 |
|       21 | rides     |                 3 |
|       22 | food      |                 4 |
|       23 | park      |                 2 |
|       24 | food      |                 3 |
|       25 | corporate |                 3 |
|       26 | rides     |                 2 |
|       27 | corporate |                 2 |
|       28 | parties   |                 2 |
|       29 | rides     |                 1 |
|       30 | corporate |                 1 |
|       31 | food      |                 2 |
|       32 | schools   |                 1 |
|       33 | venue     |                 2 |
|       34 | venue     |                 1 |
|       35 | food      |                 1 |
|       36 | park      |                 1 |
|       37 | parties   |                 1 |
+----------+-----------+-------------------+
所以

选择x.*
从我的表x
加入我的桌子
关于y.category=x.category
y.image\u id>=x.image\u id
团体
通过x.image\u id

拥有COUNT(y.image_id)此代码将检索每个类别的4个图像。 若您想检索最新的一个,那个么只需在外部查询中添加sort by cluse

    DB::table('gallery_images AS GI')
    ->where(function($query)
        {
            DB::table('tbl_dept_master AS GI2')
            ->select(DB::raw(count(1)))
            ->from('gallery_images As GI2')
            ->where('GI2.gallery','=','GI.gallery')
            ->where('GI2.title','>=','GI.title');
        })
    ->get();
如果需要更多帮助,请发表评论。
希望这能解决您的问题。

请发布您的表格结构和雄辩的名称。@VishalPatel这有帮助吗?
    DB::table('gallery_images AS GI')
    ->where(function($query)
        {
            DB::table('tbl_dept_master AS GI2')
            ->select(DB::raw(count(1)))
            ->from('gallery_images As GI2')
            ->where('GI2.gallery','=','GI.gallery')
            ->where('GI2.title','>=','GI.title');
        })
    ->get();