Атрымаць толькі непустым палёў з 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>";

I'm not sure the logic is right (two loops), any ideas ?

Maybe I wasnt clear enough, the table includes 50 fields, most probably 3 or 4 of them will have a value per row, I need to display only those columns that has values

Thanks

1
Вялікі дзякуй за параду
дададзена аўтар Digital fortress, крыніца
Вялікі дзякуй за параду
дададзена аўтар Digital fortress, крыніца
Калі ласка, не выкарыстоўвайце mysql_ * функцыі ў новым кодзе . Яны больш не падтрымліваецца і афіцыйна асуджаецца . Паглядзець чырвоную скрынку ? Больш падрабязна пра Падрыхтаваныя заявы замест гэтага, і выкарыстоўваць PDO або MySQLi - тут добры падручнік .
дададзена аўтар Luigi Siri, крыніца

9 адказы

Праверка з'яўляецца несапраўднай

<�Код> $ SQL = "SELECT * FROM audittable дзе ID =". . $ ID "І YOUR_FIELD_NAME IS NOT NULL";

2
дададзена
Што ж NAME прадстаўляюць тут?
дададзена аўтар Digital fortress, крыніца
Такім чынам, праблема з гэтым рашэннем з'яўляецца тое, што логіка была б зусім іншай, калі б вы выкарыстоўвалі яго, таму што ёсць перечислимое колькасць палёў, у якіх NULL павінен быць спраўджаны. Так, гэтая ідэя працаваць, гэтую заяву трэба будзе балатавацца на кожнай калонцы, тым самым маючы на ​​ўвазе 50+ зваротаў да базы дадзеных. Верагодна, не з'яўляецца добрым выбарам.
дададзена аўтар Mike Perrenoud, крыніца
Імя поля, якое вы хочаце выкарыстоўваць
дададзена аўтар Pramod Kumar Sharma, крыніца

Праверка з'яўляецца несапраўднай

<�Код> $ SQL = "SELECT * FROM audittable дзе ID =". . $ ID "І YOUR_FIELD_NAME IS NOT NULL";

2
дададзена
Што ж NAME прадстаўляюць тут?
дададзена аўтар Digital fortress, крыніца
Такім чынам, праблема з гэтым рашэннем з'яўляецца тое, што логіка была б зусім іншай, калі б вы выкарыстоўвалі яго, таму што ёсць перечислимое колькасць палёў, у якіх NULL павінен быць спраўджаны. Так, гэтая ідэя працаваць, гэтую заяву трэба будзе балатавацца на кожнай калонцы, тым самым маючы на ​​ўвазе 50+ зваротаў да базы дадзеных. Верагодна, не з'яўляецца добрым выбарам.
дададзена аўтар Mike Perrenoud, крыніца
Імя поля, якое вы хочаце выкарыстоўваць
дададзена аўтар Pramod Kumar Sharma, крыніца

Акрамя праверкі гэта NULL, я звычайна правяраю, калі ён не ўстаноўлены, як пусты.

SELECT * from audittable where id = " . $id." AND (NAME IS NOT NULL OR NAME != '' )
2
дададзена

Я думаю, што логіка на самай справе гук, але праблема, якую я бачу, што вы на самай справе не праверка супраць поля <�моцны> або для Null тут:

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

так што я думаю, што ў вас ёсць пара варыянтаў. Па-першае, вы можаце зрабіць гэта:

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

or you could do this:

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

Аднак, ёсць адзін нюанс з пусты . 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)

так што калі ў вас ёсць якія-небудзь лік або паплавок поля, будзе 0 <�моцны> але вы не лічыце тых, <�код > пусты гэта не будзе працаваць.

0
дададзена

Я думаю, што логіка на самай справе гук, але праблема, якую я бачу, што вы на самай справе не праверка супраць поля <�моцны> або для Null тут:

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

так што я думаю, што ў вас ёсць пара варыянтаў. Па-першае, вы можаце зрабіць гэта:

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

or you could do this:

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

Аднак, ёсць адзін нюанс з пусты . 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)

так што калі ў вас ёсць якія-небудзь лік або паплавок поля, будзе 0 <�моцны> але вы не лічыце тых, <�код > пусты гэта не будзе працаваць.

0
дададзена

Паспрабуйце гэта:

SELECT * from audittable where id = " . $id." AND (NAME IS NOT NULL OR NAME > "" )
0
дададзена

Паспрабуйце гэта:

SELECT * from audittable where id = " . $id." AND (NAME IS NOT NULL OR NAME > "" )
0
дададзена

паспрабуйце гэта раздрукаваць толькі имя_поль і вынік слупкоў, якія маюць некалькі значэнняў:

/* fetch associative array */
   $i=1;
   while($a = $result->fetch_assoc()) {
     $i++;
     foreach ($a as $key => $value) {
     if($value != NULL) {
        echo $key." = ".$value."
"; } } echo "--
"; } ...
0
дададзена

паспрабуйце гэта раздрукаваць толькі имя_поль і вынік слупкоў, якія маюць некалькі значэнняў:

/* fetch associative array */
   $i=1;
   while($a = $result->fetch_assoc()) {
     $i++;
     foreach ($a as $key => $value) {
     if($value != NULL) {
        echo $key." = ".$value."
"; } } echo "--
"; } ...
0
дададзена