我有一个长表,只有当它不为空时我才需要显示列名和它们各自的值。 所以,这是我提出的概念,但实现不起作用。
$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个字段每行都有一个值,我只需要显示那些具有值的列
由于
答案 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)
因此,如果您有integer
或float
字段0
但,那么您不会认为这些empty
工作。
答案 3 :(得分:0)
试试这个:
SELECT * from audittable where id = " . $id." AND (NAME IS NOT NULL OR NAME > "" )
答案 4 :(得分:0)
尝试这样做只打印出具有一些值的列的字段名和结果:
patchEntity