You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP While循环优化:仅获取首个商品图片URL以避免重复展示

解决PHP循环重复展示商品的问题

你的问题根源很明确:关联catalog_product_entity_media_gallery后,每个商品对应多条图片记录,导致查询结果里同一商品会出现多次,循环时就跟着重复输出了。这里给你两种实用的解决方案:

方案1:修改SQL查询(推荐,从根源减少冗余数据)

直接在SQL层面让每个商品只返回第一条图片记录,这样查询结果里每个商品只有一行,循环自然不会重复。调整后的查询语句如下:

SELECT 
  -- 子查询获取每个商品的首张图片URL
  (SELECT value FROM catalog_product_entity_media_gallery mg WHERE mg.entity_id = cpe.entity_id LIMIT 1) AS image_url,
  cg.customer_group_code,
  cpv.value,
  cpe.sku,
  cpetp.qty,
  cpetp.value
FROM `catalog_product_entity_tier_price` cpetp
JOIN catalog_product_entity cpe ON cpe.entity_id = cpetp.entity_id
JOIN customer_group cg ON cg.customer_group_id = cpetp.customer_group_id
JOIN catalog_product_entity_varchar cpv ON cpv.entity_id = cpe.entity_id
WHERE cg.customer_group_code = '$gruppe' 
AND cpv.attribute_id = 71

对应的PHP代码里,把图片URL的赋值改成:

$bilddaten = $row['image_url'];

方案2:在PHP循环中过滤重复商品

如果不想改动SQL,可以在循环里记录已经处理过的商品SKU,遇到重复的就跳过:

<?php 
require ('db.inc.php'); 
echo mysql_error(); 
?> 
<form action="#" method="get"> 
  Kundennr: <input type="text" name="nummer" /><br /> 
  <input type="Submit" value="Absenden" /> 
</form> 
<?php 
if ($_GET['nummer']) { 
  $gruppe = $_GET['nummer']; 
  echo $gruppe.":<br>"; 
  $result = mysql_query("SELECT catalog_product_entity_media_gallery.value, customer_group_code, catalog_product_entity_varchar.value, sku, qty, catalog_product_entity_tier_price.value FROM `catalog_product_entity_tier_price` JOIN catalog_product_entity on catalog_product_entity.entity_id = catalog_product_entity_tier_price.entity_id JOIN customer_group ON customer_group.customer_group_id = catalog_product_entity_tier_price.customer_group_id JOIN catalog_product_entity_varchar ON catalog_product_entity_varchar.entity_id = catalog_product_entity.entity_id JOIN catalog_product_entity_media_gallery ON catalog_product_entity_media_gallery.entity_id = catalog_product_entity.entity_id WHERE customer_group_code = '$gruppe' AND catalog_product_entity_varchar.attribute_id = 71"); 
  
  $processed_skus = []; // 存储已处理过的商品SKU
  
  while ($row = mysql_fetch_array($result)) { 
    $bilddaten = $row[0]; 
    $ids = $row[1]; 
    $ids1 = $row[2]; 
    $ids2 = $row[3]; 
    $ids3 = $row[4]; 
    $ids4 = $row[5]; 
    
    // 如果当前SKU已经处理过,直接跳过本次循环
    if (in_array($ids2, $processed_skus)) {
      continue;
    }
    // 标记该SKU为已处理
    $processed_skus[] = $ids2;
    
    echo "<img src='http://localhost/media/catalog/product/cache/1/thumbnail/60x60/9df78eab33525d08d6e5fb8d27136e95/".$bilddaten."' >"; 
    echo "Art.Nr.: ".$ids2." Bezeichung: ".$ids1." ->Menge: ".$ids3." Preis: ".$ids4."<br><br>"; 
  } 
} 
?>

另外提个小提醒:mysql_*系列函数已经被PHP官方废弃了,建议后续换成mysqli_*或者PDO,安全性和兼容性都会更好。

内容的提问来源于stack exchange,提问作者Marcel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:59:46