我有这个代码,它真的不是最漂亮和最有效的。代码工作,但我觉得有办法避免所有循环并组合这些查询,并可能产生一个数组。我只是想知道是否有人对如何改进这个
有任何指示$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++;
}
}
?>
答案 0 :(得分:3)
不使用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']}
)";
答案 1 :(得分:1)
你的代码本身就很糟糕。您需要学习应用程序架构和设计以及语言本身。
这是一篇非常好的文章:http://symfony.com/doc/current/book/from_flat_php_to_symfony2.html
关于代码的提示:
请勿使用group_concat
和explode
。最好在没有JOIN
的情况下进行两次查询:
答案 2 :(得分:1)
$sql = "
SELECT p.product_id, 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 IN ({$product['standard']['product_id']}, {$product['professional']['product_id']}, {$product['premium']['product_id']})";
$result = mysql_query($sql);
while($product_result = mysql_fetch_assoc($result)) {
$images = explode(',', $product_result['additional_images']);
$first = true;
foreach($images as $image) {
if($first) {
echo "<a id='show_{$product_result['product_id']}' style='display:none;' href='http://posnation.com/shop_possystems/image/{$image}' rel='prettyPhoto[show_{$product_result['product_id']}]'></a>";
$first = false;
}
else {
echo "<a style='display:none;' href='http://posnation.com/shop_possystems/image/{$image}' rel='prettyPhoto[show_{$product['standard']['product_id']}]'></a>";
}
}
}