使用mysql查询中的数组生成数组

时间:2011-10-03 10:27:53

标签: php mysql arrays

在电子商店工作时,我必须从数据库中读取产品包不为空的产品。

来自DB的

productpack如下所示:0141,3122,0104,0111,3114,0106,0117。

我正在尝试获取所有包含productpack(不为null)的数据库项,并将它们放入包含这些代码的数组的数组中(0141,3122,0104,0111,3114,0106,0117)。 / p>

function p_productpacks(){

    $productpacks = array();
    $pack = array();

    $q = mysql_query('SELECT productpack FROM products WHERE productpack <> "";');

    while($p = mysql_fetch_object($q)){

        $pack = explode(",", $p);

        $productpacks[] = $pack;

    }

    return $productpacks;

}   

3 个答案:

答案 0 :(得分:1)

您需要创建一个数组,否则,您将覆盖现有包:

$pack = explode(",", $p->productpack);

$productpacks[] = $pack;

有关详情请参阅array_pushDocsPHP Arrays Docs(和mysql_fetch_objectDocs)。

答案 1 :(得分:0)

您可以使用以下方式获取CSV数组中的所有产品包:

$result = mysql_query("SELECT GROUP_CONCAT(productpack) as productpacks
                       FROM products WHERE productpack <> '' ");
if ($result) {
  $row = mysql_fetch_row($result);
  $productpacks_as_CSV_string = $row['productpacks'];
}

这样你只需从数据库中获取一行,节省了大量时间。

请参阅:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

答案 2 :(得分:0)

mysql_fetch_object返回一个对象,不能与字符串处理一起使用..如果你肯定想要使用它,你需要做类似的事情:

$pack=explode(',',$p->productpack);
$productpacks[]=$pack

或者,改为使用旧的数组:

while ($p = mysql_query($q))
{
    $pack = explode(",", $p['productpack']);
    $productpacks[] = $pack;
}