0

I have a table with 12 columns and 200 rows. I want to efficiently check for fields that are empty/null in this table using php/mysql. eg. "(col 3 row 30) is empty". Is there a function that can do that? In brief: SELECT * FROM TABLE_PRODUCTS WHERE ANY COLUMN HAS EMPTY FIELDS.

OMG Ponies
  • 325,700
  • 82
  • 523
  • 502
karto
  • 1
  • 1
  • 1
  • 1

9 Answers9

4

empty != null

select * from table_products where column is null or column='';
ajreal
  • 46,720
  • 11
  • 89
  • 119
1
SELECT * FROM table WHERE COLUMN IS NULL
Sarfraz
  • 377,238
  • 77
  • 533
  • 578
1

As far as I know there's no function to check every column in MySQL, I guess you'll have to loop through the columns something like this...

$columns = array('column1','column2','column3');
foreach($columns as $column){
  $where .= "$column = '' AND ";
}
$where = substr($where, 0, -4);
$result = mysql_query("SELECT * FROM table WHERE $where",$database_connection);
//do something with $result;

The = '' will get the empty fields for you.

Will
  • 1,893
  • 4
  • 29
  • 42
  • Hello, thanks. instead of listing the columns manually, is there a way of listing all columns at once? – karto Jan 06 '11 at 15:52
1

you could always try this approach:

//do connection stuff beforehand

$tableName = "foo";

$q1 = <<<SQL
SELECT
  CONCAT(
    "SELECT * FROM $tableName WHERE" ,
    GROUP_CONCAT(
      '(' ,
      '`' ,
      column_name,
      '`' ,
      ' is NULL OR ',
      '`' ,
      column_name ,
      '`',
      ' = ""' , ')'
      SEPARATOR ' OR ')
    ) AS foo
FROM
information_schema.columns
WHERE
table_name = "$tableName"

SQL;

$rows = mysql_query($q1);

if ($rows)
{
    $row = mysql_fetch_array($rows);
    $q2 = $row[0];
}

$null_blank_rows = mysql_query($q2);

// process the null / blank rows..
trickwallett
  • 2,418
  • 16
  • 15
1
<?php
    set_time_limit(1000);

    $schematable = "schema.table";

    $desc = mysql_query('describe '.$schematable) or die(mysql_error());

    while ($row = mysql_fetch_array($desc)){

        $field = $row['Field'];
        $result = mysql_query('select * from '.$schematable.' where `'.$field.'` is not null or `'.$field.'` != ""');

        if (mysql_num_rows($result) == 0){
            echo $field.' has no data <br/>';
        }

    }
?>
jeffery_the_wind
  • 17,048
  • 34
  • 98
  • 160
0

Check this code for empty field

$sql = "SELECT * FROM tablename WHERE condition";

$res = mysql_query($sql);

while ($row = mysql_fetch_assoc($res)) {

    foreach($row as $key => $field) { 
        echo "<br>";
        if(empty($row[$key])){
            echo $key." : empty field :"."<br>";        
        }else{
            echo $key." =" . $field."<br>";     1
        }
    }

}
rahulcs754
  • 39
  • 1
  • 1
  • 5
0
$sql = "SELECT * FROM TABLE_PRODUCTS";
$res = mysql_query($sql);

$emptyFields = array();

while ($row = mysql_fetch_array($res)) {
    foreach($row as $key => $field) {
        if(empty($field)) || is_null($field) {
            $emptyFields[] = sprintf('Field "%s" on entry "%d" is empty/null', $key, $row['table_primary_key']);
        }
    }
}

print_r($emptyFields);

Not tested so it might have typos but that's the main idea. That's if you want to know exactly which column is empty or NULL.

Also it's not a very effective way to do it on a very big table, but should be fast with a 200 row long table. Perhaps there are neater solutions for handling your empty/null fields in your application that don't involve having to explicitly detect them like that but that depends on what you want to do :)

Geekfish
  • 2,173
  • 23
  • 28
  • THANKS pal, It works like magic now. just have to format it a bit. Saved me lots of time. – karto Jan 06 '11 at 17:04
0

Here i'm using a table with name words

$show_lang = $db_conx -> query("SHOW COLUMNS FROM words");
        while ($col = $show_lang -> fetch_assoc()) {
            $field = $col['Field'];
            $sel_lan = $db_conx -> query("SELECT * FROM words WHERE $field = '' ");
            $word_count = mysqli_num_rows($sel_lan);
            echo "the field ".$field." is empty at:";
            if ($word_count != 0) {
              while($fetch = $sel_lan -> fetch_array()){
                echo "<br>id = ".$fetch['id']; //hope you have the field id...
              }
            }
        }
0

There is no function like that but if other languages are allowed, you can extract the structure of a table and use that to generate the query. If you only need this for a single table with 30 columns, it would be faster to write the query by hand...

DataVader
  • 740
  • 1
  • 5
  • 19