结合MySQL结果的多个产品属性

时间:2016-01-25 14:08:22

标签: php mysql arrays while-loop

我有一个mySQL表,其中包含产品属性行,每个属性都与特定属性类别(id_attrib_cat)相关联。

用户应该为每个产品属性组合定义一个价格,所以我需要一个循环来创建一个属性表,并在每行的末尾输入价格。

属性类别值对于排除来自相同类别的属性非常重要。

我该如何做到这一点?

修改

属性类别示例:值

格式:方形,舍入

尺寸:S,M,L

颜色:白色,蓝色,黑色,黄色

属性组合表的示例(下面的循环应该这样做):

  1. Square + S + White = [价格输入]
  2. Square + S + Blue = [价格输入]
  3. Square + S + Black = [价格输入]
  4. [...]

    $q = mysql_query("SELECT id_attrib_cat, id_attrib, name FROM cms_products_attribs WHERE id_product=10 ORDER BY id_attrib ASC"); 
    
      while ($row = mysql_fetch_array($q, MYSQL_NUM)) {
    
          [** attribute combination + price input code **] 
    
      }
    

2 个答案:

答案 0 :(得分:3)

使用CONCAT

在查询本身中连接
SELECT CONCAT(`id_attrib_cat`, ' ', `id_attrib`) AS `attributes`, `name` 
FROM `cms_products_attribs` 
WHERE `id_product`=10 
ORDER BY `id_attrib` ASC

这对您来说意味着您将从该行获得单个输出:

while ($row = mysql_fetch_array($q, MYSQL_NUM)) {
  $attribs = $row['attributes'];
  echo $attribs . '<input name="price" type="text" />;
}

从机械上讲,你可能需要更多的东西,包括完整形成表格并在提交时处理表格,但这应该让你开始。

如果可以的话,你应该总是让你的数据库完成它为之设计的繁重工作。

stop using mysql_* functions。已在PHP 7中删除These extensions。了解preparedPDOMySQLi语句,并考虑使用PDO,it's really pretty easy

答案 1 :(得分:0)

首先,我建议使用PDO。在PHP 5.5.0中不推荐使用mysql_query,它已在PHP 7.0.0中删除

您的查询应该是:

$q  =   $db->prepare("SELECT `id_attrib_cat`, `id_attrib`, `name` FROM cms_products_attribs WHERE `id_product`=:id_product ORDER BY `id_attrib` ASC");
$q->execute(array(':id_product'=>"10"));

我相信查询会返回多行。而不是同时,使用foreach:

foreach($q as $row){

$id_attrib_cat  =   $row['id_attrib_cat'];
$id_attrib      =   $row['id_attrib'];
$name           =   $row['name'];

//Price Input goes here
echo $id_attrib_cat.'<br>';
echo $id_attrib.'<br>';
echo $name.'<br>';
echo '<input type = "text" name="'.$id_attrib.'">';
}