mysql foreach设置动态ID类和值

时间:2014-03-28 17:42:16

标签: php mysql

我有这个表设置。我正在努力弄清楚如何设置选择以使我的foreach循环遍历结果并显示每个card_id的正确pest_counts和pest_names。我使用left_x和top_y将card_id放在地图上,但我希望每个card_id只显示pest_count和pest_name。我可以使用每个card_ id显示所有或一个计数,但我无法获得与该card_id相关联的每个pest_counts和pest_names。 这是我的表

pest_name   pest_count  card_id   card_type top_y   left_x   scout_date
Aphids      2              1       yellcard  652    703   3/13/2014 15:59:54
Thrips      4              1       yellcard  652    703   3/13/2014 15:59:54
Thrips      2              2       bluecard  754    707   3/13/2014 15:59:54
Thrips      1              3       yellcard  531    616   3/13/2014 15:59:54
Thrips      1              5       yellcard   80    613   3/13/2014 15:59:54

这是我最终想要的每张牌上的每个pest_name和pest_count。 这将是card_id 1

   2 Aphids
   4 Thrips

这是我尝试过的众多选择之一。

 $stmt = $pdo->prepare("SELECT card_id,card_type,top_y,left_x,pest_count,pest_name,scout_date FROM scout_logpestnum WHERE scout_date ='2014-03-13 15:59:54' GROUP BY card_id");
 $stmt->execute();
 $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

这是html。

<?php
 foreach($result as $obj) {
?>
<div id="input<?= htmlspecialchars($obj['card_id']) ?><?= htmlspecialchars($obj['pest_name']) ?>" class="input stickyinput"><?= htmlspecialchars($obj['pest_count']) ?></div>

 <div class="pestnameholder">
<?php
echo'<div class="pestname '.$obj['pest_name'].'">'.$obj['pest_name'].'</div>' ;
echo '</div>';
 }

1 个答案:

答案 0 :(得分:1)

您可以使用group_concatconcat作为害虫名称和计数,然后按所有其他属性进行分组。这允许您为pest_name和pest_count提供单个标签:

select
  group_concat(concat(pest_count,' ',pest_name) separator '<br/>') pests,
  card_id,
  card_type,
  top_y,
  left_x,
  scout_date
from scout_logpestnum
group by
  card_id,
  card_type,
  top_y,
  left_x,
  scout_date

http://www.sqlfiddle.com/#!2/dad13/10