0

我目前正在制作一个网站,该网站使用基于标准的评分系统以及其他注释。每个标准都有一个与之关联的分数,并且分数与产品一起显示。标准链接是通过使用中间链接表的“标签云”完成的。问题是,我希望能够选择符合某些标准的产品,但是当我尝试这样做时,它会改变产品分数——这就是问题所在。

我在 Laravel 的查询生成器中使用以下代码。然而,这更像是一个 MySQL 问题,所以如果你愿意,你可以用简单的 SQL 来回答它。

$products = DB::table('products')->
    select('products.name', 'products.scored', 'products.slug', DB::raw('(SUM(`hex_criteria`.`score`) + SUM(DISTINCT(`hex_additionalnotes`.`score`))) as score'))->
    leftjoin('criteria_linkings', 'products.id', '=', 'criteria_linkings.product_id')->
    leftjoin('criteria', 'criteria_linkings.criteria_id', '=', 'criteria.id')->
    leftjoin('additionalnotes', 'additionalnotes.product_id', '=', 'products.id');

if (Input::get('criteria')) {
    $products->where(function($query) {
        $crits = explode('-', Input::get('criteria'));

        $query->where('criteria.id', '=', $crits[0]);
        for ($i = 1; $i < count($crits); $i++) {
            $query->orWhere('criteria_id', '=', $crits[$i]);
        }
    });
}

$products = $products->
    orderBy('scored', 'DESC')->
    orderBy($arr[0], $arr[1])->
    groupBy('products.id')->
    paginate(12);

以下是产生的查询:

array(1) {
  [0]=>
  array(3) {
    ["query"]=>
    string(550) "select `hex_products`.`name`, `hex_products`.`scored`, `hex_products`.`slug`, (SUM(`hex_criteria`.`score`) + SUM(DISTINCT(`hex_additionalnotes`.`score`))) as score

    from `hex_products`
    left join `hex_criteria_linkings` on `hex_products`.`id` = `hex_criteria_linkings`.`product_id`
    left join `hex_criteria` on `hex_criteria_linkings`.`criteria_id` = `hex_criteria`.`id` left join `hex_additionalnotes` on `hex_additionalnotes`.`product_id` = `hex_products`.`id` where (`hex_criteria`.`id` = ? or `criteria_id` = ?)
    group by `hex_products`.`id`
    order by `scored` DESC, `score` asc"
    ["bindings"]=>
    array(2) {
      [0]=>
      string(2) "18"
      [1]=>
      string(2) "13"
    }
  }
}

基本上,我想选择具有一定标准的产品,而不改变其分数。有什么想法可以解决这个问题吗?谢谢!

4

0 回答 0