2010-11-14 66 views
0

我使用if子句來獲取我的mysql表數據的值,因爲我的表模式不正常。從複雜的mysql表中獲取問題

現在得到這些值,我寫了下面的代碼:

$result = $db->sql_query("SELECT type, var, count from table_counter"); 
    while ($row = $db->sql_fetchrow($result)) { 
    $type = $row['type']; 
    $var = $row['var']; 
    $count = intval($row['count']); 
     if(($type == "total") && ($var == "visits")) { 
      $totalVisits= $count; 
     }elseif(($type == "total") && ($var == "pageviews")) { 
      $totalPVisits= $count; 
     } 
    } 

是否有任何其他的方式,而不是使用if條款?

回答

0

你打算如何處理數據?只需創建計數?

您可以在多個查詢中提取數據。

另一種方法是將數據放入數組中,然後使用PHP數組排序函數對數據進行排序。如果需要的話,它可以分成兩個獨立的數組。

1
SELECT `type`, `var`, SUM(`count`) AS `sum` 
FROM table_counter 
GROUP BY `type`,`var`; 

沒有必要爲intval()轉換的count領域爲整數。它已經在MySQL表中定義爲一個整數。

+0

不錯的朋友 – 2010-11-14 13:44:26

0

您將需要旋轉數據。這將需要你編寫一些代碼來解析你在php和mysql中需要的東西。這可能會變得很沉重,取決於你想要的數據量以及如何存儲以及如何檢索。根據您的問題文本,您看起來存儲的是非常簡單的數據,但是對於您存儲的每種類型和一組數據,您需要爲其創建邏輯。

Soooo,如果你確切知道變量將會變成什麼樣子,你可以設置你想要設置的變量名稱的數組並循環遍歷它們。

$legal_values = array('visits', 'pageviews', etc...); 
while ($row = $db->sql_fetchrow($result)) { 
    if (in_array($row['var'], $legal_values)) { 
     $$row['var'] = $intval($row['count']; 
    } 
} 

這只是一個簡單的例子,只有在所有類型都是計數的情況下才有效。顯然,如果你想過濾它,你將需要更多的邏輯。對於這些東西並沒有真正的全面解決方案,所以它歸結爲編寫簡單的東西,以便您理解它,並且您可以輕鬆擴展它以處理稍後可能需要的更多數據。

0
${$row['type'] . ucfirst($row['var'])} = $row['count']; 

該讀數爲total pageviews 107$totalPageviews = 107。根據你想使用的位置,這可能是一種可能性。