将数据存储到PHP数组中

时间:2012-07-20 15:16:42

标签: php mysql arrays while-loop

total_starsHere是代码,它是我尝试做的最佳解释:

$total_stars = array();
$query = "SELECT items_id FROM items";
$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {
    $item_id = $row['items_id'];
    $sql = "Select Count(item_id) FROM ratings WHERE item_id = '{$item_id}'";
    $result = mysql_query($sql);
    $total_stars[] = mysql_fetch_array($result);
}

//  To see the output by entering the URL I want to print_r  
print_r($total_stars);

// In the end, I am trying to JSON encode this and will later output in Java for Android
print(json_encode($total_stars));

(为了不混淆,items_id在项目表中,item_id(没有' s')在评级表中)

现在用简单的英语:

我循环遍历items表中的每一行。当我这样做时,在每个循环中,我指的是另一个名为" Ratings"的表,并计算该项目的评分数。

例如,我希望数组看起来像(65,43,55,43等)。当然是样本编号。但每个代表表格中每个项目的总评分量。如何让print__r在循环中显示SQL语句的结果?

更新代码尝试使用加入:

$query = "SELECT items_id FROM items";

$q = 'SELECT 
    items.items_id, 
    COUNT(ratings.item_id) AS rate 
    FROM `items`
    LEFT JOIN ratings ON (ratings.item_id = items.items_id)
    GROUP BY items_id';
$result = mysql_query($q);

while ($row = mysql_fetch_array($result)) {

    $total_stars = mysql_fetch_array($result);

}

print_r($total_stars);

print_r输出:      数组([0] => 783 [items_id] => 783 [1] => 0 [费率] => 0)

2 个答案:

答案 0 :(得分:3)

$total_stars = array();
while ($row = mysql_fetch_array($result))
{
    $item_id = $row['items_id'];
    $sql = "Select Count(item_id) FROM ratings WHERE item_id = '{$item_id}'";
    $result = mysql_query($sql);
    $row = mysql_fetch_row($result);
    $total_stars[] = row[0];
}

这应该这样做。

不要忘记mysql_fetch_array返回一个包含列索引的数组。所以mysql_fetch_array($ result)将是你想要第一个元素的数组(来自MySQL函数COUNT()的结果),而不是计数本身。

但正如我在评论中所说,请改用联接查询。您将从第一个查询的行数+ 1(可能很多!)减少到mysql服务器的查询量,只需一个,这是一个巨大的改进。

更新:以下是使用连接查询(Sven查询)的方法:

$q = 'SELECT 
    items.items_id, 
    COUNT(ratings.item_id) AS rate 
    FROM `items`
    LEFT JOIN ratings ON (ratings.item_id = items.items_id)
    GROUP BY items_id';
$result = mysql_query($q);

$total_stars = array();
while ($row = mysql_fetch_array($result))
{
    $total_stars[] = $row['rate']; // Stars count is stored in $row['rate']
    echo "Item id ".$row['items_id']." has rating ".$row['rate'];

}

答案 1 :(得分:1)

为什么不按照评论中的建议使用JOIN?如果你想要一个包含所有项目评级的数组,那么这是一种方式(没有测试PHP数据库代码,但我测试了查询)。

$total_stars = array();

$q = 'SELECT 
        items.item_id,
        COUNT(ratings.item_id) AS rate 
      FROM `items`
      LEFT JOIN ratings ON (ratings.item_id = items.item_id)
      GROUP BY item_id';
$result = mysql_query($q);

$total_stars = mysql_fetch_array($result);

您应该使用MYSQLi或PDO_MYSQL。 more info MYSQLimore info PDO

在这里,您可以找到有关JOINS的更多信息:Info about MYSQL joins