1

我正在尝试使用 Jade 呈现 SQL 查询的结果。它查询一个包含横幅的表格,每个横幅都有一个类型(总共 3 个)和一个唯一的 ID。

这就是我所拥有的:

表示 :

connection.query("SELECT * FROM banner_idx ORDER BY id_type ASC, id_banner ASC", function selectCb(err, results, fields) {
        if (err) {throw err;}
        res.render('banners', {
            title: results[0].title,
            results: results
        });
    });

翡翠:

ul.listBanners
    - each result in results
        li.banner(data-type=result['id_type'])
        - var item = result['id_banner']+': '+result['name_banner']
        span=item

这给了我一个按我想要的顺序排列的横幅列表。现在我想以这种方式组织它(伪代码):

ul#id_type1
    list of banners with id_type == 1
ul#id_type2
    list of banners with id_type == 2
ul#id_type3
    list of banners with id_type == 3

这可能与玉有关吗?我应该从 Express 发送 3 个结果集而不是 1 个吗?那么问题是任何新的 id_type 都需要硬编码......有什么想法吗?

4

1 回答 1

0

您可以使用lodash.groupBy以下方式对结果集进行分组id_type

var _ = require('lodash');

...
connection.query("SELECT * FROM banner_idx ORDER BY id_type ASC, id_banner ASC", function selectCb(err, results, fields) {
  if (err) {throw err;}
  res.render('banners', {
      title   : results[0].title,
      groups  : _.groupBy(results, 'id_type')
  });
});

groupBy返回一个如下所示的对象:

{
  '1' : [
    { id_type : 1, ... },
    { id_type : 1, ... },
    ...
  ],
  '2' : [
    { id_type : 2, ... },
    { id_type : 2, ... },
    ...
  ],
  ...
}

id_type因此,在这种情况下,该对象中的键是您要分组的属性的值。

您的模板看起来像这样:

each entries, id in groups
  ul(id = 'id_type' + id)
    each entry in entries
      li #{ entry.id_banner + ': ' + entry.name_banner }
于 2013-11-05T20:37:14.583 回答