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)
答案 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 MYSQLi,more info PDO
在这里,您可以找到有关JOINS的更多信息:Info about MYSQL joins