1

我有一个长表,只有当它不为空时,我才需要显示列名及其各自的值。所以,这是我提出的一个概念,但实施不起作用。

$sql = "Select * from audittable where id = " . $id;
$result = mysql_query($sql) or die(mysql_error());


$sqlfields = 'SHOW COLUMNS FROM audittable where field not in ("audit_id","last_by","last_datetime","id")';
$fieldsquery = mysql_query($sqlfields);

echo "<table style='width:100%;padding:8px'>
    <tr class='heading'><td>Field Name</td><td>Value</td></tr>";
while ($row = mysql_fetch_array($result)) {

    foreach ($rowfields = mysql_fetch_array($fieldsquery)) {
        if ($rowfields["field"] == $row[0] && $row[0]!=""){
   ?>
<tr>
    <td><?=$row[0]?></td>
    <td><?=$row[1]?></td>

</tr>
<?php
        }
    }   
}
echo "</table>";

我不确定逻辑是否正确(两个循环),有什么想法吗?

也许我不够清楚,该表包含 50 个字段,很可能其中 3 或 4 个字段每行都有一个值,我只需要显示那些有值的列

谢谢

4

5 回答 5

2

支票为空

$sql = "Select * from audittable where id = " . $id." AND YOUR_FIELD_NAME IS NOT NULL";

于 2013-05-23T12:09:56.840 回答
2

除了检查它是否为 NULL,我通常检查它是否没有设置为空。

SELECT * from audittable where id = " . $id." AND (NAME IS NOT NULL OR NAME != '' )
于 2013-05-23T12:12:02.150 回答
0

尝试这个:

SELECT * from audittable where id = " . $id." AND (NAME IS NOT NULL OR NAME > "" )
于 2014-10-31T04:51:19.583 回答
0

我认为逻辑实际上是合理的,但我看到的问题是您实际上并没有检查该字段或此处null

if ($rowfields["field"] == $row[0] && $row[0] != "")

所以我认为你有几个选择。首先,您可以这样做:

if ($row[$rowfields["field"]] != null
    && $row[$rowfields["field"]] != "")

或者你可以这样做:

if (!empty($row[$rowfields["field"]]))

但是,有一个警告empty。PHP手册说:

The following things are considered to be empty: 
  * "" (an empty string)
  * 0 (0 as an integer)
  * 0.0 (0 as a float)
  * "0" (0 as a string)
  * NULL
  * FALSE
  * array() (an empty array)
  * $var; (a variable declared, but without a value)

因此,如果您有任何integerfloat字段,0 您不认为这些字段是empty行不通的。

于 2013-05-23T12:31:42.633 回答
0

试试这个只打印出具有某些值的列的字段名和结果:

/* fetch associative array */
   $i=1;
   while($a = $result->fetch_assoc()) {
     $i++;
     foreach ($a as $key => $value) {
     if($value != NULL) {
        echo $key." = ".$value."<br/>";
        }
     }
     echo "-- <br />";    
   } 
   ...
于 2016-05-19T07:42:48.043 回答