【问题标题】:how to find the greatest number from an array如何从数组中找到最大的数
【发布时间】:2009-11-01 00:54:54
【问题描述】:

这是 db 上的 books 表;

book_ID             writer_ID
--------           -----------
1                      10
2                      10
3                      10
4                      10
5                      10

这是数据库上的费率表,

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)和每个 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

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

感谢理解。

【问题讨论】:

  • 您的问题现在的意义不如编辑前的问题。向我们展示您表中某些行的示例。向我们展示您感兴趣的领域。向我们展示其用途。

标签: php mysql


【解决方案1】:

或者只是让数据库为你做:

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

【讨论】:

  • 如果提问者的数据允许,这是首选的方式。
  • 确实还是让数据库找到最大值比较好。但是 OP 在评论中说他们需要循环从数据库中获取额外的数据。
【解决方案2】:

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

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

【讨论】:

  • 当然在 WHERE 子句和 ORDER BY 中指定 'id' 会达到目的。
【解决方案3】:

您尚未告诉我们您的查询将返回数据库中的哪些字段。看起来您正在对键列进行过滤(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 后有更好的方法从 $myarray 中获取 best_number,请随时编辑我的答案。


更新:

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

第一个将为您提供每本书的平均价格:

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 中构建数据结构。我相信你可以弄清楚如何做到这一点。

【讨论】:

  • 很抱歉,我再次编辑了我的问题,我试图解释我卡住的地方
  • 我可以建议不要完全改变你的问题的上下文吗?改变我们的答案以跟上完全改变问题的编辑成为更多的工作,很少有人会尝试这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 2023-01-13
  • 2011-10-31
  • 1970-01-01
  • 2021-06-14
相关资源
最近更新 更多