0

total_stars这里是代码,它是我想要做的最好的解释:

$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 在 items 表中,item_id(没有's')在 rating 表中)

现在用简单的英语:

我正在遍历项目表中的每一行。当我这样做时,在每个循环中,我指的是另一个名为“评级”的表,并计算该项目有多少评级。

例如,我希望数组看起来像(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 输出: Array ( [0] => 783 [items_id] => 783 [1] => 0 [rate] => 0 )

4

2 回答 2

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() 的结果),而不是计数本身。

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

更新:以下是如何使用连接查询(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'];

}
于 2012-07-20T15:23:25.027 回答
1

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

$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。更多信息 MYSQLi ,更多信息 PDO

在这里您可以找到有关 JOINS 的更多信息:有关 MYSQL 连接的信息

于 2012-07-20T15:49:28.667 回答