显示MySQL表中没有空值的所有列

时间:2017-07-24 07:55:48

标签: php mysql mysqli

我有一个历史角色的数据库,包含以下三个表:

t_name
t_occupation
t_location

t_name包括所有生物信息,例如姓名,姓氏,日期等 t_occupation列出了可能的职业(作家,歌手等),并且是t_name列“id_occupation”的外键 t_location将所有具有plz和链接的位置列为t_name表中几列的外键,例如: id_birthplace,id_placeofdeath,id_placeofliving等。

我想生成整个数据库的输出,其中列出了所有非空的列的所有历史角色(例如,Persona 1可能有id_birthplace但id_placeofdeath未知,因此不应列出id_placeofdeath ,但其余的应该)。

在PHP 4.0中,我使用变量存储信息并使用if语句生成列表(mysql_result),但PHP 7.0不再可能。

如何在最新版本中执行此操作?

我尝试了以下代码:

$res = mysqli_query($con,"SELECT * FROM ( SELECT t_name AS table, IF(COUNT(name), NOT NULL, name) AS column
                                     FROM t_name
                                     UNION ALL
                                     SELECT t_location AS table, IF(COUNT(location), NOT NULL, location) AS column FROM t_ort
                                     UNION ALL)
                                     WHERE column IS NULL");



  while ($dsatz = mysqli_fetch_assoc($res))
    {
      echo $dsatz["name"] . ", "
          .$satz["location"] . "<br /> <br />";
    }

我得到的唯一结果是:找到记录但没有列表。我出了什么问题?

1 个答案:

答案 0 :(得分:0)

SELECT * FROM ( SELECT tableA AS table, IF(COUNT(column_a), NOT NULL, column_a) AS column 
FROM tableA 
UNION ALL 
SELECT tableB AS table, IF(COUNT(column_b), NOT NULL, column_b) AS column FROM tableB 
UNION ALL -- etc. ) t 
WHERE column IS NULL