Bir dizinin en büyük numarasını bulmak için nasıl

3 Cevap php

Bu db üzerine kitaplar tablodur;

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

Bu db üzerindeki oranları tablo,

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

Şimdi, ben ilk başta writer_ID var ve ben (o writer_ID bağlı) tüm book_ID ve oranları tablosundaki her book_ID ortalama oranlarını bulmak zorunda. Sonunda, ben büyük oranı ortalama ve book_ID bulmak zorunda

Bu benim kodudur

$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

üzgünüm, benim soru ama ingilizce benim anadil değil, benim sorunu açıklamak için elimden geleni yapıyorum. Bazen i cant ve ben sadece sıkışmış.

Anlayışınız için teşekkürler.

3 Cevap

Ya da sadece veritabanı sizin için yapalım:

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

Işlevleri hangi olarak sınırlı iseniz (bazı CRUD sınıfını kullanarak yani) gerçekleştirebilirsiniz:

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

Eğer sorgu tarafından iade edilecektir veritabanından hangi alanlar bize söylemedin. Eğer tek bir kayıt dönmelidir anahtar sütun üzerinde (WHERE yan tümcesi) filtreleme konum gibi de görünüyor. Bu nedenle orada her şeyi dışarı şerit ve tek koydum:

$greatest_record = 34;

Bir sorgu için hiç mi hiç gerek!

Yapıyoruz ve ne beklediğini alanlar ne biraz daha fazla bilgi:

$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";

Biz veritabanından döndürülen her satırda büyük sayı ne tutulan, bu yüzden $ tekrar MyArray döngü yoktu unutmayın. Eğer onlarca satır ya da daha binlerce varsa büyük bir optimizasyon olabilir Minor optimizasyon.

Bu çözüm aslında daha sonra veritabanından kimliği ve ORAN alanları kullanmak gerekir, ama en büyük numarası artık ne olduğunu bilmek istiyorum temelinde olduğunu. Herkes, bunu oluşturulan oluyor sonra $ myArray itibaren greatest_number almanın daha iyi bir yol olduğunu düşünüyorum eğer benim cevap düzenlemek için çekinmeyin.


Update:

Daha sonra görevi başarmak için çeşitli sorguları ihtiyacımız olacak.

Önce size kitap başına ortalama oranı verecektir:

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

İkinci size maksimum ortalama oranı verecektir:

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)

Bu, belirli bir yazar için size kitapların bir listesini vereceğim:

SELECT book_id
FROM Books
WHERE writer_id = $some_id

Bir sorguda her şeyi yapmaya kalkmayın. Eğer çok çok yakın yinelenen satırları umursamıyorum sürece bir sorgu içine tüm bu gereksinimleri Karıştırma, siz istediğiniz kadar çalışmaz.

Ben size sahip soruyu cevaplamak için bu güncelleştirmeyi kullanabilirsiniz umuyoruz. Bu SQL sorguları size ihtiyacınız bilgi verecek, ancak bu veriler, bazı how kullanmanız gerekir eğer hala PHP veri yapıları inşa etmek gerekir. Bunu yapmak için nasıl anlamaya eminim.