SQL检查空列的行 - 比较它们

时间:2017-10-25 16:57:10

标签: php mysql sql

我想要一个包含内容的列的列表。 所以我试试。我将检查我的数据库中的每个字段,确定哪些字段没有内容。

$ arrAllField是可用字段列表

$ strTable是我在寻找

的表格
    foreach ($arrAllField as $arrField)
            {
                $Result = $this->Database->prepare("SELECT * FROM ".$strTable." WHERE ".$arrField."  <> '' AND ".$arrField." IS NOT NULL ")->execute();
                while($Result->next())
                {   
                    $arrAllowedField[$arrField] = $arrField;    
                }
 }  

Oky但问题是,我需要比较它们,以便我只返回所有行包含内容的列。

也许有一种更好的方法可以通过SQL直接执行此操作,例如查看表格并仅获取列条目(行)具有内容的列。

最好的问候

彼得

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:检查表的记录总数是否与该列的值具有某些内容的记录数相同,如您所说。这样,您的查询将如下所示:

foreach ($arrAllField as $arrField) {
    $query = "SELECT (SELECT count($arrField) FROM `$strTable`) = (SELECT count($arrField) FROM `$strTable` WHERE $arrField <> '' AND $arrField IS NOT NULL) AS has_content";
    //Perform the query and process the result.
}

执行时,上面的查询会返回一个名为&#39; has_content&#39;的列。如果列$arrField具有包含内容的所有记录,则值为1;如果列$arrField的某些记录没有内容,则为0。然后,您可以通过检查has_content列的值来按照您喜欢的方式处理查询结果。

如果要一次检索所有信息而不是执行多个查询并处理它们,只需使用子查询创建一个数组并将它们连接成一个大的查询,如下所示:

$columnQueries = array();
foreach ($arrAllField as $arrField) {
    array_push($columnQueries, "(SELECT count($arrField) FROM `$strTable`) = (SELECT count($arrField) FROM `$strTable` WHERE $arrField <> '' AND $arrField IS NOT NULL) AS " . $arrField . "_has_content");
}
$finalQuery = "SELECT " . implode(", ", $columnQueries);
//Perform the $finalQuery and process the result.

这将返回一行,其中$arrAllField的列与&#34; _has_content&#34;连接。每列的值遵循我之前提到的相同逻辑。

我希望这会对你有所帮助。

祝你好运。