php - 有没有办法将这 3 个查询合二为一

标签 php mysql html

我有这段代码,它确实不是最漂亮和最高效的。该代码有效,但我觉得有办法避免所有循环并组合这些查询并可能构成一个数组。我只是想知道是否有人对如何改进这一点有任何指示

$sql = "SELECT p.image, group_concat(pi.image) as additional_images 
FROM product as p 
JOIN product_image as pi on pi.product_id=p.product_id 
WHERE p.product_id = '{$product['standard']['product_id']}'";
$result = mysql_query($sql);
$images_before = mysql_fetch_assoc($result);
$images = array();
if($images_before['additional_images'] != ""){
$images = explode(",", $images_before['additional_images']);
}
array_push($images, $images_before['image']);
$sql2 = "SELECT p.image, group_concat(pi.image) as additional_images 
FROM product as p 
JOIN product_image as pi on pi.product_id=p.product_id 
WHERE p.product_id = '{$product['professional']['product_id']}'";
$result2 = mysql_query($sql2);
$images_before2 = mysql_fetch_assoc($result2);
$images2 = array();
if($images_before2['additional_images'] != ""){
$images2 = explode(",", $images_before2['additional_images']);
}
array_push($images2, $images_before2['image']);
$sql3 = "SELECT p.image, group_concat(pi.image) as additional_images 
FROM product as p 
JOIN product_image as pi on pi.product_id=p.product_id 
WHERE p.product_id = '{$product['premium']['product_id']}'";
$result3 = mysql_query($sql3);
$images_before3 = mysql_fetch_assoc($result3);
$images3 = array();
if($images_before3['additional_images'] != ""){
$images3 = explode(",", $images_before3['additional_images']);
}
array_push($images3, $images_before3['image']);
$counter = 0;
foreach($images as $image) {
      if ($counter == 0) {
          echo "<a id='show_{$product['standard']['product_id']}' style='display:none;' href='http://somesite.com/shop_possystems/image/{$image}' rel='prettyPhoto[show_{$product['standard']['product_id']}]'></a>";
                $counter++;
      }else{
        echo "<a style='display:none;' href='http://somesite.com/shop_possystems/image/{$image}' rel='prettyPhoto[show_{$product['standard']['product_id']}]'></a>";
            $counter++;
        }
}

$counter2 = 0;
  foreach($images2 as $image) {
        if ($counter2 == 0) {
            echo "<a id='show_{$product['professional']['product_id']}' style='display:none;' href='http://somesite.com/shop_possystems/image/{$image}' rel='prettyPhoto[show_{$product['professional']['product_id']}]'></a>";
                    $counter2++;
        }else{
          echo "<a style='display:none;' href='http://somesite.com/shop_possystems/image/{$image}' rel='prettyPhoto[show_{$product['professional']['product_id']}]'></a>";
                $counter2++;
            }
}
$counter3 = 0;
    foreach($images3 as $image) {
          if ($counter3 == 0) {
              echo "<a id='show_{$product['premium']['product_id']}' style='display:none;' href='http://somesite.com/shop_possystems/image/{$image}' rel='prettyPhoto[show_{$product['premium']['product_id']}]'></a>";
                        $counter3++;
          }else{
            echo "<a style='display:none;' href='http://somesite.com/shop_possystems/image/{$image}' rel='prettyPhoto[show_{$product['premium']['product_id']}]'></a>";
                    $counter3++;
                }
    }
?>

最佳答案

而不是使用 where p.product_id = <value> , 使用 WHERE IN语法:

$sql = "SELECT  ...
WHERE p.product_id IN (
  {$product['standard']['product_id']},
  {$product['professional']['product_id']}, 
  {$product['premium']['product_id']}
)";

关于php - 有没有办法将这 3 个查询合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6372839/

相关文章:

mysql - Yii 查询生成器中的 IN 问题

MySQL-Perl : How to get array of zip codes within submitted "x" miles of submitted "zipcode" in Perl example

javascript - 文本框的值基于其他文本框的值

html - 悬停时导航栏元素变大?

php - 如何从 mysql 表 PHP 中获取最大整数值

php - 备受推崇的 PHP 风格指南列表?

php - 使用AND和OR的Elasticsearch NOT bool 运算

mysql - Prestashop 1.6.1.6 更新数据库中的值

html - 如何为 flexbox、row、no-wrap 添加换行符?

php - 是否可以通过 PHP 访问 REQUEST_FILENAME?