我想要一个包含内容的列的列表。 所以我试试。我将检查我的数据库中的每个字段,确定哪些字段没有内容。
$ 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直接执行此操作,例如查看表格并仅获取列条目(行)具有内容的列。
最好的问候
彼得
答案 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;连接。每列的值遵循我之前提到的相同逻辑。
我希望这会对你有所帮助。
祝你好运。