这是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
这是我的问题,抱歉,但英语不是我的母语,我正在尽力解释我的问题。有时我不能,我只是卡住了。
感谢您的理解。
答案 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中构建数据结构。我相信你可以弄清楚如何做到这一点。