Php、MySql连接表、限制每个类别的记录

Php、MySql连接表、限制每个类别的记录,php,mysql,Php,Mysql,我有两张桌子: 项目 品牌 Model_ID Title --------------------- 1 Audi 2 BMW 3 Acura 以及以下查询: SELECT b.name, i.title, FROM items AS i INNER JOIN brands AS b ON b.Model_ID = i.Model_ID

我有两张桌子:

项目

品牌

Model_ID        Title
---------------------
1               Audi
2               BMW
3               Acura
以及以下查询:

  SELECT 
    b.name,
    i.title,
  FROM
    items AS i 
    INNER JOIN brands AS b 
      ON b.Model_ID = i.Model_ID 
  WHERE i.status = 1
  ORDER BY i.created DESC;
上述操作将生成工作阵列:

Array
(
    [0] => stdClass Object
        (
            [name] => 2010 Audi L1
            [title] => Audi
        )

    [1] => stdClass Object
        (
            [name] => 2014 MBW X5
            [title] => BMW

        )

        ...
)
然后我使用自定义函数在数组中循环,并以

Array
(
    [Acura] => Array
        (
            [0] => stdClass Object
                (
                    [name] => 2015 Acura L1
                    [title] => Acura
                )

            ...
        )

    [BWM] => Array
        (
            [0] => stdClass Object
                (
                    [name] => 2016 BMW X5
                    [title] => BWM
                )

            ...
        )
    [Audi] => Array
        (
            [0] => stdClass Object
                (
                    [name] => 2010 Audi L1
                    [title] => Audi
                )
            ...
        )    
)
现在我可以使用foreach循环并限制每个品牌显示x个项目,但我的想法是在数据库中执行,因此,我希望每个品牌最多显示5个项目,而不是拉取所有记录

注意:我没有列出表的其余字段,例如created,它用于对记录进行排序

获取品牌: $q='根据标题ASC从品牌订单中选择型号_ID作为ID'; $r=mysql\u查询$q; $model_id=数组; 而$brand=mysql_fetch_assoc$r{$model_ids[]=$brand['id'];}

然后使用从第一步或其他地方收集的模型_ID-s,例如:从搜索表单,生成如下选择查询: 因此,我们将获得结果查询的记录:

  SELECT 
    b.name,
    i.title,
  FROM
    items AS i 
    INNER JOIN brands AS b 
      ON b.Model_ID = i.Model_ID 
  WHERE i.status = 1
  ORDER BY i.created DESC;
挑选 b、 名字, i、 标题来自 如我所述的项目 内部加入品牌为b 在b.Model_ID=i.Model_ID,其中b.Model_ID=1,i.status=1,由i.created DESC LIMIT 5订购

联合所有

挑选 b、 名字, i、 标题来自 如我所述的项目 内部加入品牌为b 在b.Model_ID=i.Model_ID,其中b.Model_ID=2,i.status=1,由i.created DESC LIMIT 5订购

联合所有

挑选 b、 名字, i、 标题来自 如我所述的项目 内部加入品牌为b 在b.Model_ID=i.Model_ID,其中b.Model_ID=3,i.status=1,由i.created DESC LIMIT 5订购


是我错了,还是该查询完全混淆了,因此它实际上与表列不匹配?@riggsfully query是正确的,根据我的说明,我没有包括其余字段,只有所需的字段。我没有标题b有标题。b没有名字,我有名字??可能是重复的
$q = array(); 
foreach($mode_ids AS $model_id) {
    $q[] = '(SELECT b.name, i.title FROM items AS i INNER JOIN brands AS b ON b.Model_ID = i.Model_ID WHERE b.Model_ID = '.(int)$model_id.' AND i.status = 1 ORDER BY i.created DESC LIMIT 5)';
}

if(!empty($q)) {
    $q = implode(' UNION ALL ', $q);
    $r = mysql_query($q);
    while($record = mysql_fetch_object($r)) {
        var_dump($record);
    }
}