如何将两个不同的行合并到一行中?
问题描述:
我有一张桌子,显示的是一种产品,但有不同的供应商。如何将两个不同的行合并到一行中?
SQL:
$q=3000;
$sql="SELECT product_id, product_reference AS kood,product_name AS nimetus,product_quantity AS nr, pl.link_rewrite,psa.quantity as kogukogus,ps.product_supplier_reference as supp_ref,ps.product_supplier_url as supp_url, p.location AS asukoht,
CONCAT(c.link_rewrite,'/',p.id_product,'-',pl.link_rewrite,'.html') link
FROM ps_order_detail o
JOIN ps_product_lang pl on o.product_id = pl.id_product
JOIN ps_product p on p.id_product = pl.id_product
JOIN ps_stock_available psa on p.id_product = psa.id_product
JOIN ps_category_lang c on c.id_category = p.id_category_default
JOIN ps_product_supplier ps on p.id_product = ps.id_product
WHERE pl.id_lang=2 AND c.id_lang=2 AND id_order= '".$q."'";
PHP:
$rs=$ib->query($sql);
if (PEAR::isError($rs)) die($rs->getMessage());
if($rs) {
while($r = $rs->fetchRow(MDB2_FETCHMODE_ASSOC)) {
$supref=$r["supp_ref"];
if($supref!="" || $supref!=null){
$suppref=$supref;
}
$out .= "\n".'<tr>';
//Pildi lingi leidmine
$rs2=$ib->query("SELECT id_image FROM ps_image WHERE id_product=".$r["product_id"]." AND cover=1");
while($r2 = $rs2->fetchRow(MDB2_FETCHMODE_ASSOC)) { $ids=$r2["id_image"]; }
//Kui on lisame pildid
if (!isset($_GET["ni"]))
$out .= '<td><a href="'.getImageLink(STRIPSLASHES($r["link_rewrite"]),$ids, 'large').'"><img src="'.getImageLink(STRIPSLASHES($r["link_rewrite"]),$ids, 'small').'" /></a></td>';
//Tabeli tekstiosa
$out .= '<td><b><font size=+1>'.$r["kood"].'</font></b> - <a href="'.$vmpath.$r["link"].'" target=_new>'.$r["nimetus"].'</a><br> '.$r["tootja_kood"].' </td><td><a>'.$suppref.'</a></td><td>'.$r["nr"].'</td><td>'.$r["kogukogus"].'</td><td><b>'.$r["asukoht"].'</b></td></tr>';
}
$out .="\n</table>\n";
}
我该如何合并两个不同的供应商为一列?像这样:
答
你可以在product_supplier_reference使用GROUP_CONCAT,这需要所有的值从GROUP BY子句,并从它创建一个单独的领域。
$sql="SELECT product_id, product_reference AS kood,product_name AS nimetus,product_quantity AS nr, pl.link_rewrite,psa.quantity as kogukogus,group_concat(ps.product_supplier_reference) as supp_ref,ps.product_supplier_url as supp_url, p.location AS asukoht,
CONCAT(c.link_rewrite,'/',p.id_product,'-',pl.link_rewrite,'.html') link
FROM ps_order_detail o
JOIN ps_product_lang pl on o.product_id = pl.id_product
JOIN ps_product p on p.id_product = pl.id_product
JOIN ps_stock_available psa on p.id_product = psa.id_product
JOIN ps_category_lang c on c.id_category = p.id_category_default
JOIN ps_product_supplier ps on p.id_product = ps.id_product
WHERE pl.id_lang=2 AND c.id_lang=2 AND id_order= '".$q."'
GROUP BY product_id, kood,nimetus,nr,pl.link_rewrite, kogukogus,supp_url,asukoht, link";
虽然你可能需要删除ps.product_supplier_url作为supp_url - 看看它是如何工作的第一位。
我还建议移动链接到前端的东西的构建,因为这样可以让程序员在事情发生变化时更加灵活 - 而不是混淆复杂的SQL语句。