这个问题是参考我在此发布的上一个问题PHP display results equivalent to comma separated values in the database。 我几乎解决了这个问题。现在我被困在其他地方,如果解决了我的问题将被解决。
问题是:
请先看一下这段代码
<div class="ads-container">
<?php
$cat = $pdo->prepare("SELECT * FROM ads_category");
$cat-> execute();
$i = 0;
while($s = $cat->fetch()){
$ads = $pdo->prepare("SELECT *, GROUP_CONCAT(memberships.mbs_color) FROM advertisements
INNER JOIN memberships ON FIND_IN_SET(memberships.mbs_id, advertisements.ad_memberships)
LEFT JOIN ads_category ON advertisements.ad_category = ads_category.ac_id
WHERE ad_credits >= ac_credits AND ad_category = :cat AND ad_status = 'active'
GROUP BY advertisements.ad_id");
$ads-> bindValue(':cat', $s['ac_id']);
$ads-> execute();
while($a = $ads->fetch()){ extract($a);
?>
<div class="" <?php if($i++ != 0){ echo "style='margin-top: 30px'"; } ?>>
<i class="fa fa-bullhorn" aria-hidden="true"></i> <?php echo $ac_category; ?>
</div>
<div class="col-sm-4">
<div class="adcover">
<div class="ad-title">
<a href="surf.php?ad=<?php echo $ad_id; ?>" target="_blank"><?php echo $ad_title; ?></a>
</div>
<div class="ad-footer-two"> <?php echo $a['GROUP_CONCAT(memberships.mbs_color)']; // this is giving me the values comma separated perfectly ?>
<span class="membership-indicator" style="background: <?php echo $mbs_color; ?>; margin-top: 4px; margin-left: 5px"></span>
</div>
</div>
</div>
<?php } } ?>
</div>
现在的问题是当我回显<?php echo $a['GROUP_CONCAT(memberships.mbs_color)']; ?>
时,我完全得到了逗号分隔的颜色值。但我希望将其显示为<span class="membership-incdicator"></span>
中的颜色,而不是https://prnt.sc/hvj91s中的颜色。那么,我该怎么做呢?我必须在这里使用foreach()
功能吗?如果是,那么请告诉我如何编写该代码。如果没有,那么请告诉我如何实现这一目标。
答案 0 :(得分:2)
整个事情看起来非常混乱,但爆炸列表并循环:
$mbs_colors = explode(',', $a['GROUP_CONCAT(memberships.mbs_color)']);
foreach($mbs_colors as $color) {
echo '<span class="membership-indicator" style="background: ' . $color . '; margin-top: 4px; margin-left: 5px"></span>';
}
此外,您可以使用别名:SELECT *, GROUP_CONCAT(memberships.mbs_color) AS colors
,然后使用:$a['colors']
。
这确实是个问题;为什么GROUP_CONCAT
呢?我不确定,但必须有更好的查询。