2013-06-02 78 views
1

我有桌子的人。PHP數值在數據庫中降序?

id, name product_A product_B 
-- ----- --------- --------- 
1 Joe  1   4  // result product A + Product B = 5 
2 Leo  5   1  // result product A + Product B = 6 
3 Lia  2   2  // result product A + Product B = 4 

首先,我需要計算產品A +產品B.

function count($a,$b){ 
$total = $a+$b; 
return $total; 
} 

然後在數據庫中調用值

$count_row = mysql_query("SELECT * FROM person "); 
    $result_row= mysql_num_rows($count_row); 
$i=0; 
$j=0; 
$k=0; 
    $query = "SELECT * FROM person " 
    $result = mysql_query($query) or die ("Query error: " . mysql_error()); 
    while($row = mysql_fetch_array($result)) 
     { 
      $array_a[$i++]=$row['product_A']; 
      $array_b[$j++]=$row['product_B']; 
      $array_name[$j++]=$row['name']; 
     } 
for ($i = 0 ; $i < $count_row ; $i++){ 
$tot[i] = count($array_a,$array_a); 
$array_name[i]; 
} 

//排序

function desc($result_row){ 
    $array = array(); 
    global $tot; 
    for ($n = 0 ; $n <$result_row ; $n++){ 
     array_push($array,$tot[$n]); 
    } 
    for($i = 0 ; $i < sizeof($array) ; $i++) 
     rsort($array); 
       for ($n = 0 ; $n <$result_row ; $n++){ 
       echo $array_name[$n]."<br>"; 
          echo $array[$n]."<br>"; 
       } 
      } 

    desc($result_row); 

然後我想要根據最高值或d來回顯名稱產品A +產品B的升序。 '產出= Leo,Joe,Lia'。 我該如何在PHP代碼中做到這一點?請幫我...

+0

你爲什麼不在數據庫中對它進行排序,然後打印結果?它會更有效率,而不是你在這裏嘗試的。 –

+0

@BurhanKhalid因爲在我的真實情況下,當用戶輸入一些數據時,product_A + product_B的結果將始終更新。因此,當多個用戶在同一時間輸入數據時,它會變得複雜。我只是試圖提出一個簡單的問題來解決我的問題。但這並不容易:( –

+1

)用真實的案例更新你的問題會更好,而不是要求某些想象中的問題的解決方案 - 或者簡單地,刪除SQL部分並調整你的問題,這樣它就是關於排序數組而不是數據庫/總和值 –

回答

0

試試這個:

<?php 
//product array ($products is the array fetched from the db) 
$products = array(); 
$products[0] = array('id'=>1, 'name'=>'Joe', 'productA'=>1, 'productB'=>4); 
$products[1] = array('id'=>2, 'name'=>'Leo', 'productA'=>5, 'productB'=>1); 
$products[2] = array('id'=>3, 'name'=>'Lia', 'productA'=>2, 'productB'=>2); 

//Create a single-column array with sums 
$productSum = array(); 
foreach ($products as $product) { 
    $productSum[] = (int)$product['productA'] + (int)$product['productB']; 
} 
//Do the magic, sort DESCENDING by $productSum-array into $products-array 
array_multisort($productSum, SORT_DESC, $products); 

//Output 
print_r($products); 
?> 

輸出:

Array (
[0] => Array ([id] => 2 [name] => Leo [productA] => 5 [productB] => 1) 
[1] => Array ([id] => 1 [name] => Joe [productA] => 1 [productB] => 4) 
[2] => Array ([id] => 3 [name] => Lia [productA] => 2 [productB] => 2) 
) 

有關在array_multisort(詳細信息),來看看: http://php.net/manual/en/function.array-multisort.php

+0

如果我有很多關於數據庫的數據,我應該從數據庫中寫出所有產品數組$ product [0],$ products [1]等嗎? –

+0

你可以使用whlle_mysql_fetch_assoc()並使用語法echo $ row ['name'] – bestprogrammerintheworld

+0

謝謝...我用你的代碼解決了我的問題。我只是編輯你的代碼來解決我的真實案例..非常感謝:) –

1

同比可能會嘗試這樣

SELECT (tp.product_A + tp.product_B) AS total,tp.name 
FROM table_person tp 
ORDER BY total DESC 
+0

不,我的意思是我必須在PHP中計算product_A + product_B而不使用查詢。所以,首先我必須調用product_A和product_B的值。然後我用PHP計算它。但是,我無法通過product_A + product_B的最高結果回顯該名稱。其實這不是我真正的情況。我只是試圖提出一個簡單的問題來解決我的問題。 –

+0

@VictoriaCho你可以在php中獲得數組的值,然後添加tp.product_A和tp.product_B值,並將其設置爲新密鑰並通過DESC對新密鑰的值進行排序。 – sAnS

+0

是的,我做到了。我將product_A + product_B的結果保存在一個數組中。我可以對結果進行排序。但是我在分類之後無法迴應這個名字。輸出仍然像表Joe,Leo,Lia一樣。 –

0

至於你的問題的解決方案,請嘗試執行下面的查詢。

select *,product_A + product_B as total from person order by total desc 
+0

在我的真實情況下,product_A + product_B不能在查詢中計數。因此,首先我必須調用每個值product_A和product_B。然後我使用一個函數來計算它們。然後我得到product_A + product_B的結果。我可以對價值進行排序。但是我在分類之後無法迴應這個名字。輸出仍然像表Joe,Leo,Lia一樣。 –

+0

用真實的案例更新你的問題會更好,而不是問一些想象中的問題的解決方案 - 或者簡單地,刪除SQL部分並調整你的問題,所以它是關於排序數組而不是數據庫/總和值。 –

+0

@BurhanKhalid我的問題和我的真實案例的區別是......我的真實案例需要更多的計算,而不僅僅是總和函數中的總和值。 –

1

最簡單的方法是使用人們爲您寫的建議SQL。在php中這樣做對你的情況並不實際。而是在SQL中做,並保存自己的一些代碼在服務器上的寫作和內存。

例子:

在SQL:

SELECT *, product_A + product_B AS product_sum FROM persons ORDER BY product_sum DESC 

然後在PHP中:

while($record = mysql_fetch_assoc($result_set)) 
{ 
    // Results Already will be sorted for you you just have to output them. 
    echo $record['name'].' has '.$record['product_sum'].' product sum.'; 
    echo '<br/>'; 
} 

而且可以輸出現在的名字或你想要的產品數或總量或任何東西。