2015-05-18 33 views
0
$a = 0; 
$b = 0; 
$array = []; 
while ($a < mysql_num_fields($result)) { 
    $meta = mysql_fetch_field($result, $a); 
    if (!$meta) { 
     //error 
    } 
    while($row = mysql_fetch_row($result)) 
{ 
    foreach($row as $cell) 
    $array[$b] = $cell; 
    $b++; 
} 
    } 
    $a++; 
    $getColumns = mysql_query("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='OCN' AND `TABLE_NAME`='cpu'") or die(mysql_error()); 
$emptyColumns = array(); 

while($columns = mysql_fetch_assoc($getColumns)){ 
    $checkEmptyColumn = mysql_query("SELECT IF(". $columns['COLUMN_NAME'] ." IS NULL or ". $columns['COLUMN_NAME'] ." = '', 'empty', ". $columns['COLUMN_NAME'] .") as ". $columns['COLUMN_NAME'] ." from cpu") or die(mysql_error()); 
    $numEmptyColum = mysql_num_rows($checkEmptyColumn); 
    if($numEmptyColum > 0){ 
     while($test = mysql_fetch_assoc($checkEmptyColumn)){ 
      array_push($emptyColumns, $test[$columns['COLUMN_NAME']]); 
      //$emptyColumns[$columns['COLUMN_NAME']] = $test[$columns['COLUMN_NAME']]; 
     } 
    } 
} 

echo "<pre>"; 
print_r($emptyColumns); 
echo "</pre>"; 

我想選擇只有至少有一個條目的列。如果整列爲空或空,我不想顯示它。不幸的是,我不知道列名會出現。我想當前的方法可以拉每列的名稱,並通過循環插入它。它仍然打印完全無效的列。不能選擇只有數據的列

我在做什麼錯?

+2

where where子句過濾掉行而不是列。 – Mureinik

+0

好的,我該如何去過濾柱子?如果沒有行在某一列中有數據,我不想顯示它。 –

+1

這類問題往往是設計不佳的症狀。 – Strawberry

回答

1

聊了很久後,終於理解正是他想要的東西,我修訂我的答案。

基本上他想要做的是隻顯示在其中一行中有數據的表列。因此,如果所有現有行中的列都爲空,則不會顯示。

這樣做與PHP和MySQL會探討吃了很多CPU處理時間,因爲他有超過500列。因此,我用jQuery完成了相同的結果:

<!DOCTYPE HTML> 
<html> 
    <head> 
     <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"> 
     <title>OCN CPU PPD Database</title> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 
     <script> 
     $(document).ready(function(){ 
      $('#main th').each(function(i) { 
       var remove = 0; 

       var tds = $(this).parents('table').find('tr td:nth-child(' + (i + 1) + ')') 
       tds.each(function(j) { if (this.innerHTML == '') remove++; }); 

       if (remove == ($('#main tr').length - 1)) { 
        $(this).hide(); 
        tds.hide(); 
       } 
      }); 
     }); 
     </script> 
    </head> 
    <body> 
     <h1 style="text-align: center;">Overclock.net CPU PPD Database</h1> 
     <table id="main"> 
      <tr class="header"> 
       <?php 

       $conn = mysql_connect('localhost', 'user', 'password'); 
       if (!$conn) { 
        die('Could not connect: ' . mysql_error()); 
       } 
       mysql_select_db('OCN'); 

       $getColumns = mysql_query("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='OCN' AND `TABLE_NAME`='cpu'") or die(mysql_error()); 
       $result = mysql_query('SELECT * FROM cpu') or die(mysql_error()); 

       while($columns = mysql_fetch_assoc($getColumns)){ 
        echo "<th>". $columns['COLUMN_NAME'] ."</th>"; 
       } 
       echo "</tr>"; 

       while($data = mysql_fetch_assoc($result)){ 
        echo "<tr>"; 

        foreach($data as $test){ 
         echo "<td>". $test ."</td>"; 
        } 
        echo "</tr>"; 
       } 

       ?> 
      </tr> 
     </table> 
    </body> 
</html> 
+0

好吧,我從來沒有得到任何進一步的建議。我會試試這個。 –

+0

它應該工作得很好。順便說一句,我真的建議移動到'mysqli_ *'或'pdo'。 'mysql_ *'已被官方棄用,並告訴你實情,將所有東西都還原爲'mysql_ *'是一種痛苦:P – icecub

+0

另外,如果你不需要數組中的列名,可以取消註釋'array_push在那之後註釋'$ emptyColumns..'。數組鍵現在只是0,1,2,3等 – icecub

0

嘗試

$checkResult = 'SELECT '.$meta->name.' FROM cpu WHERE '.$meta->name.'>'''' and '.$meta->name .' Is not null limit 1'; 
+0

打印所有列。我應該注意到幾乎所有的列名都只是數字。 –

+0

這就是你想要的嗎?這是一個不受歡迎的問題,希望我不需要這樣做。 – Tim3880

+0

不。根據我的問題,只有有數據的列。如果一列未被所有行使用,則不應顯示它。根據wrightee的建議,我正在取得進展。 –