从mySQL只获取非空字段

时间:2013-05-23 12:07:52

标签: php mysql

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

$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个字段每行都有一个值,我只需要显示那些具有值的列

由于

5 个答案:

答案 0 :(得分:2)

检查为空

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

答案 1 :(得分:2)

除了检查它是NULL之外,我通常会检查它是否设置为空。

SELECT * from audittable where id = " . $id." AND (NAME IS NOT NULL OR NAME != '' )

答案 2 :(得分: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工作。

答案 3 :(得分:0)

试试这个:

SELECT * from audittable where id = " . $id." AND (NAME IS NOT NULL OR NAME > "" )

答案 4 :(得分:0)

尝试这样做只打印出具有一些值的列的字段名和结果:

patchEntity