2016-05-25 3 views
1

Как я могу сортировать свои данные, чтобы дать оценку, как 5 звезд, 4 звезды, до 1 звезды.сортировать данные расчета, чтобы ранжировать мои данные в php

Это мой запрос

function top5cust($tahun, $bulan) 
{ 
    if ($tahun == 'semua' && $bulan == 'semua'){ 
     $data = $this->db->query("SELECT nama_jalan, no_rumah, jarak, kelurahan, kecamatan, kota, COUNT(*) as freq 
           from t_cust GROUP by nama_jalan, no_rumah, jarak,kelurahan, kecamatan, kota 
           ORDER by freq DESC LIMIT 5"); 

    } 
    else 
    { 

     $data = $this->db->query("SELECT nama_jalan, no_rumah, jarak, kelurahan, kecamatan, kota, COUNT(*) as freq 
           from t_cust 
           WHERE YEAR(tgl_req) = $tahun AND MONTH(tgl_req) = $bulan 
           group by nama_jalan, no_rumah, jarak, jarak,kelurahan, kecamatan, kota 
           ORDER by freq DESC LIMIT 5"); 
    }   
    return $data->result();  
} 

и это мой PHP код

<table> 
    <thead> 
    <tr> 
    <th><center>Alamat</center></th> 
    <th><center>Jarak</center></th> 
    <th><center>Frekuensi</center></th> 

    <th><center>Rate</center></th> 
    </tr> 
    </thead> 
    <tbody> 
    <?php 

    $cost=2000; 
    $totalbeli=50000; 

    foreach($top5cust as $data){ 
     $frekuensi=$data->freq; 
     $jaraks=$data->jarak; 
     $perhitunganrank=($frekuensi*$totalbeli)-($jaraks*$cost*$frekuensi); 


     echo "<tr>"; 
     echo "<td>".$data->nama_jalan." no ".$data->no_rumah.", ".$data->kelurahan.", ".$data->kecamatan.", ".$data->kota." </td>"; 
     echo "<td>".$data->jarak."</td>"; 
     echo "<td>".$data->freq."</td>"; 
     echo '<td>'.$perhitunganrank.'</td>'; 
     echo"</tr>"; 
    }?> 
    </tbody> 
</table> 

Как можно сортировать данные и дать скорость по $perhitunganrank, но без эхо его. Извините, если мой вопрос непонятен, мой английский не очень хорош.

С уважением, ridho

+0

также разместить свой вход и ожидаемые результаты –

+0

входные данные из база данных и выход - таблица с 4 столбцами (alamat, jarak, frekuensi и Rate). данные в таблице сортируются по результату $ perhitunganrank Desc sort .. –

+0

В вашем запросе есть проблема. Вам нужно подумать о тех случаях, когда пользователь выбирает только год, но не месяц, и наоборот. В противном случае запрос будет 'where month = 'semua'', который либо вернет нулевые результаты, либо ошибку, в зависимости от типа данных вашего столбца. – mastazi

ответ

0

Вы можете использовать usort, вы можете увидеть в документации здесь: http://php.net/manual/en/function.usort.php пример в вашем случае будет:

$cost=2000; 
$totalbeli=50000; 

//We create an empty array. We need this array because PDO resultsets are iterable objects which means you can't iterate twice 

$my_array = array(); 

//Now we put objects into this empty array. Each row from the resultset will be a new object. 

foreach($top5cust as $data){ 
// The following is a shallow copy (using the keyword 'clone'). It is OK as long as the fields are primitive variables. 
    $my_object = clone $data; 
    $my_object->perhitunganrank=($my_object->freq*$my_object->totalbeli)-($my_object->jarak*$cost*$my_object->freq); 
    array_push($my_array, $my_object); 
} 

// Now we need to create a function that compares two objects and tells us which one comes first between the two. 
// This function will then be used by usort. 
// The function compares using the property perhitunganrank. 

function cmp($a, $b){ 
    return strcmp($a->perhitunganrank, $b->perhitunganrank); 
} 

// now we sort based on the function above 
usort($my_array, "cmp"); 

//Finally we print the array of objects which is now sorted. 
foreach($my_array as $row_to_print){ 
    $counter =1; 
    echo "<tr>"; 
    echo "<td>".$row_to_print->nama_jalan." no ".$row_to_print->no_rumah.", ".$row_to_print->kelurahan.", ".$row_to_print->kecamatan.", ".$row_to_print->kota." </td>"; 
    echo "<td>".$row_to_print->jarak."</td>"; 
    echo "<td>".$row_to_print->frekuensi."</td>"; 
    echo '<td>'.$row_to_print->perhitunganrank.'</td>'; 
    echo '<td>'.$counter.'</td>'; 
    echo"</tr>"; 
    $counter++; 
} 
+0

Ох Бог благодарен очень много. mastazi код успеха, его сохранить меня .. –

+0

о бог thankyou очень много г-н. mastazi успех кода, его сохранить меня .. у меня есть еще один вопрос, если я хочу добавить 1 colom снова («рейтинг») содержат числа, представляющие perhitunganrank (например: наибольшее значение perhitunganrank, представленное номером 1, второе по величине значение представленный номером 2 и т. д.) Надеюсь, вы поймете мой вопрос, спасибо. –

+0

Конечно! См. Мой отредактированный ответ, я использовал переменную $ counter, я нахожусь на мобильном телефоне. Надеюсь, я набрал ее правильно :-) – mastazi

Смежные вопросы