【问题标题】:Can I run one mysql query to output data both 'ungrouped' and also 'grouped by'?我可以运行一个 mysql 查询来输出“未分组”和“分组依据”的数据吗?
【发布时间】:2017-07-15 11:05:36
【问题描述】:

如何运行一个 mysql 查询来输出“未分组”和“按用户名分组”的数据?

我有一个查询来获取与用户帖子相关的所有数据。在 while 循环中,我正在检索用户名并将其输入到选择/选项下拉列表中。在此之下,它实际上是在输出单个帖子 - 用户名和帖子。

这一切都很好,但如果用户有多个帖子,他/她的名字会在下拉列表中重复。如果我在查询中使用 GROUP BY 子句,那么它不会显示所有帖子 - 每个用户只显示一个。

我无法运行单独的查询(或者至少我找不到解决方案),因为我有分页查询设置,所以在下拉列表中运行单独的查询只会显示所有用户,而我只是想要显示当前显示在页面上的那些。

有没有办法在同一个查询中同时输出“未分组”和“分组依据”的数据?

这是我想要的输出示例。 注意:用户 Michael Smith 有 2 个帖子,但他的名字只出现在下拉列表中一次。

<h3>Posts Filter</h3>
<select>
  <option>Michael Smith</option>
  <option>James Hendrickson</option>
  <option>Lucy Michaels</option>
</select>

<br>
<br>
<hr>

<div style="width:45%;height:200px;float:left;border:1px solid #ddd;padding:10px;margin:2.5%;box-sizing:border-box;">
  <h2>Michael Smith</h2>
  <p>Bacon ipsum dolor amet short ribs kevin ribeye meatball filet mignon swine pork loin spare ribs, pork belly cow tenderloin venison...</p>
</div>

<div style="width:45%;height:200px;float:left;border:1px solid #ddd;padding:10px;margin:2.5%;box-sizing:border-box;">
  <h2>James Hendrickson</h2>
  <p>Bacon ipsum dolor amet short ribs kevin ribeye meatball filet mignon swine pork loin spare ribs, pork belly cow tenderloin venison...</p>
</div>

<div style="width:45%;height:200px;float:left;border:1px solid #ddd;padding:10px;margin:2.5%;box-sizing:border-box;">
  <h2>Michael Smith</h2>
  <p>Bacon ipsum dolor amet short ribs kevin ribeye meatball filet mignon swine pork loin spare ribs, pork belly cow tenderloin venison...</p>
</div>

<div style="width:45%;height:200px;float:left;border:1px solid #ddd;padding:10px;margin:2.5%;box-sizing:border-box;">
  <h2>Lucy Michaels</h2>
  <p>Bacon ipsum dolor amet short ribs kevin ribeye meatball filet mignon swine pork loin spare ribs, pork belly cow tenderloin venison...</p>
</div>

<hr>
<br>

<span style="margin: 0 10px 0 0;width:30px;height;30px;line-height:30px;text-align:center;display:block;float:left;color:#ddd;background:#000;">1</span>

<span style="margin: 0 10px 0 0;width:30px;height;30px;line-height:30px;text-align:center;display:block;float:left;color:#000;background:#ddd;">2</span>

<span style="margin: 0 10px 0 0;width:30px;height;30px;line-height:30px;text-align:center;display:block;float:left;color:#000;background:#ddd;">3</span>

<span style="margin: 0 10px 0 0;width:30px;height;30px;line-height:30px;text-align:center;display:block;float:left;color:#000;background:#ddd;">4</span>

<span style="margin: 0 10px 0 0;width:30px;height;30px;line-height:30px;text-align:center;display:block;float:left;color:#000;background:#ddd;">5</span>

<br>
<br>

提前谢谢你。

谢尔盖

【问题讨论】:

  • 这里没有数据库代码。
  • 不,你不能在同一个查询中得到分组和未分组的结果——它只是不能那样工作。不过,您应该能够根据下拉菜单中的数据运行另一个查询。
  • 可以将其取消分组并group it in PHP
  • 这似乎是您上一个问题stackoverflow.com/q/42381424/1415724的转贴
  • Fred -ii- 相似但不同,因为我现在有分页方面,基本上可以减少打印结果。而且我也在尝试更习惯于使用 mysql 查询进行此类过滤,因为我对它们不太熟悉。

标签: php mysql select group-by


【解决方案1】:

这就是我要做的。

运行未分组的查询。然后“预组装”下拉列表的值。类似这样的东西(就本示例而言,您的查询结果称为$results):

$dropdown = array();
foreach($results as $r)
{
    $dropdown[] = $r['user_name'];
}
$dropdown = array_unique($dropdown);

然后在您的选择中选择:

<select>
<?php foreach($dropdown as $value): ?>
    <option><?php echo $value; ?></option>    
<?php endforeach; ?>
</select>

这不是最优雅的解决方案,但它应该适合你。

【讨论】:

    【解决方案2】:

    在查询中使用 distinct 会更好,它会给出不同的作者姓名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 2016-12-21
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多