如何从数组中找到最大数字

时间:2009-11-01 00:54:55

标签: php mysql

这是db;

上的书籍表
book_ID             writer_ID
--------           -----------
1                      10
2                      10
3                      10
4                      10
5                      10

这是db上的费率表,

book_ID    rate
-------   --------
1          4
2          3
2          5
2          1
2          4
3          5
4          2
4          5
4          2
4          4
5          3

现在,我首先拥有writer_ID,我必须找到所有book_ID(连接到该writer_ID)以及rates表中每个book_ID的平均费率。最后,我必须找到最高的平均价格及其book_ID

这是我的代码

$query="SELECT * FROM books WHERE seller_id ='$id'";
$result = mysql_query($query);

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

//getaveragerate is the function that returns average of the rates from rates table
$arr = array(ID => $info['book_ID'], average => getaveragerate($info['book_ID']));

}


$greatest_average_and_books_id_number = max($arr); // dont know how to get highest average and its ID together from array

这是我的问题,抱歉,但英语不是我的母语,我正在尽力解释我的问题。有时我不能,我只是卡住了。

感谢您的理解。

3 个答案:

答案 0 :(得分:10)

或者让数据库为您完成:

SELECT max(fieldname) FROM rates WHERE id='34'

答案 1 :(得分:2)

如果您可以执行哪些功能(即使用某些CRUD类),则受限:

SELECT * FROM rates WHERE id='34' ORDER BY id DESC LIMIT 1

答案 2 :(得分:2)

您尚未告诉我们您的查询将返回数据库中的哪些字段。它看起来像你在键列上过滤(WHERE子句),它应该只返回一个记录。因此,您可以删除那里的所有内容,只放:

$greatest_record = 34;

根本不需要查询!

有关您正在做什么以及您期望哪些领域的更多信息:

$query = "SELECT id, rate FROM rates";
$result = mysql_query($query);
$myarray = array();
$greatest_number = 0;
while ($row = mysql_fetch_array($result)) {
    myarray[] = $row; // Append the row returned into myarray
    if ($row['id'] > $greatest_number) $greatest_number= $row['id'];
}

// Print out all the id's and rates
foreach ($myarray as $row_num => $row) {
    print "Row: $row_num - ID: {$row['id']}, Rate: {$row['rate']} <br>";
} 

print "Highest ID: $greatest_number";

请注意,我们维护了从数据库返回的每一行中最大的数字,因此我们不必再次遍历$ myarray。如果您有数万行或更多行,则可以进行小幅优化。

此解决方案的基础是您实际上需要稍后使用数据库中的ID和RATE字段,但想知道现在最大的ID是什么。任何人,如果您认为有更好的方法可以在生成后从$ myarray中获取最大数字,请随时编辑我的答案。


更新

然后你需要几个查询来完成你的任务。

第一个将为您提供每本书的平均费率:

SELECT 
    book_id,
    avg(rate) as average_rate
FROM Rates 
GROUP BY book_id

第二个会给你最高平均费率:

SELECT 
    max(averages.average_rate), 
    averages.book_id
FROM (
        SELECT 
            book_id,
            avg(rate) as average_rate
        FROM Rates 
        GROUP BY book_id
     ) 
     as averages
WHERE averages.average_rate = max(averages.average_rate)

这将为您提供给定作者的书籍清单:

SELECT book_id
FROM Books
WHERE writer_id = $some_id

不要尝试在一个查询中执行所有操作。将所有这些要求混合到一个查询中将无法按照您的要求进行操作,除非您不介意许多非常接近重复的行。

我希望您可以使用此更新来回答您的问题。这些SQL查询将为您提供所需的信息,但如果您需要使用这些数据,您仍需要在PHP中构建数据结构。我相信你可以弄清楚如何做到这一点。