Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在单个查询中使用公共Where子句进行多次选择?_Php_Mysql_Sql_Mysql Select Db - Fatal编程技术网

Php 如何在单个查询中使用公共Where子句进行多次选择?

Php 如何在单个查询中使用公共Where子句进行多次选择?,php,mysql,sql,mysql-select-db,Php,Mysql,Sql,Mysql Select Db,如果一个县等于“baawa”,如何为多个表中的所有值创建一个查询。我正在使用PHP连接到数据库 我尝试的是: SELECT ( SELECT * FROM health WHERE county='baawa' ), ( SELECT * FROM hotspots WHERE county='baawa' ),

如果一个县等于“baawa”,如何为多个表中的所有值创建一个查询。我正在使用PHP连接到数据库

我尝试的是:

    SELECT (                
            SELECT * FROM health WHERE county='baawa'
            ),
            (
            SELECT * FROM hotspots WHERE county='baawa'
            ),
            (
            SELECT * FROM markets WHERE county='baawa'
            ),
            (
            SELECT * FROM schools WHERE county='baawa'
            ),
            (
            SELECT * FROM security WHERE county='baawa'
            )
编辑:表的列数不同

表格列:

健康 设施id, 名称 沃德, 位置, 拉特, 朗, 工作人员 职员组, 结构,, 紧急事件, 冲突案件, 通讯设施, 权力


热点 名称 拉特, 朗, 沃德, 位置, 管理大学委员会, 安全 类型


市场 市场id, 名称 沃德, 位置, 拉特, 朗, 管理大学委员会, 保安


学校 全文, 学校id, 名称 水平, 沃德, 位置, 拉特, 朗, 学生, 职员:没有, 和平俱乐部, 受影响的冲突


安全性 安全标识, 名称 沃德, 位置, 拉特, 朗, 工作人员 结构,, 运输,, 沟通, 权力 犯罪,
分辨率

由于SQL查询返回二维行集,因此输出必须具有一致的列集。因此,不可能向几个显著不同的表发出一个查询,并生成包含所有相关表的所有列的输出。请参见脚注。如果希望所有列都可用,例如
SELECT*
将生成的列,则需要发出5个单独的查询,并分别从中获取行

现有结构可以做什么: 对于现有结构,要获得所有这些相同的组合行集,需要使用以下模式:

SELECT col1, col2 FROM health WHERE county = 'baawa'
UNION ALL
SELECT col1, col2 FROM hotspots WHERE county = 'baawa'
UNION ALL
SELECT col1, col2 FROM markets WHERE county = 'baawa'
UNION ALL....
SELECT col1, col2 FROM schools WHERE county = 'baawa'
UNION ALL
SELECT col1, col2 FROM security WHERE county = 'baawa'
/* ORDER BY applies to the whole rowset */
ORDER BY col2 DESC, col1 ASC
问题是,使用此方法,您只能以我在这里所做的过于简单的方式获取所有表共有的列。查看表结构,我看到的常见列是
名称、病房、位置、lat、lon
。因此,您必须在每个
UNION
组件的
SELECT
中以相同的顺序列出它们

请注意,我没有在
UNION
查询中使用
SELECT*
。除非表是完全相同的,并且最初定义的列顺序完全相同,
SELECT*
将不会以相同的顺序生成列,并且您的输出将没有意义,因为它们不会在
UNION
'd表之间对齐

执行
联合
查询时,必须明确说明
选择
列表中列的顺序。在您的情况下,这无论如何都是不可能的,因为表之间存在显著差异

如果需要在结果查询中包含一个或两个并非所有表都通用的其他列,可以在
SELECT
列表中,通过在不存在该列的
UNION
组件中添加
NULL
。例如,
mgt_committee
列中存在的2,以及不存在的
NULL

/* NULL as mgt_committee where column doesn't exist in table... */
SELECT col1, col2, NULL AS mgt_committee FROM health WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, mgt_committee FROM hotspots WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, mgt_committee FROM markets WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, NULL AS mgt_committee FROM schools WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, NULL AS mgt_committee FROM security WHERE county = 'baawa'

脚注:


在一个
SELECT
中包含所有表中的所有列的唯一方法是列出所有表的超集,就像我在
mgt_committee
中所做的那样,这意味着所有表中的所有列都必须在
UNION
的每个组件中表示,并用
NULL
替换不存在的列。不要这样做,这没有意义。

所有这些表都有完全相同的列结构?如果是这样,最好的解决方案是将它们合并到一个表中,该表是
type
的一列,就像
type='security'
type='markets'
@Michael Berkowski一样,这些表有不同的列。这个问题不是重复的,因为它涉及的是As,而不是Where子句,我在Where子句中尝试过,但没有效果。重复投票被删除。我一直要求您提供一个查询输出应该是什么的示例,以消除这种混淆。如果表具有不同的列,则很难以合理的方式组合它们。请发布至少两个表的结构示例,以及您希望查询生成的内容。谢谢Michael,我将用表的结构更新问题。我已经更新了问题。但我仍然看到了重复的通知,我的观点是-1.)非常感谢您的帮助和详细的回答。我现在明白了。是否可以动态创建一个新的通用表,该表将包含所有表的所有列?这样做是为了避免在添加新数据时转到代码或数据库。您可以创建一个视图,该视图覆盖所有表的所有列,如
create view all\u combined AS(选择…联合所有选择…联合所有选择…)然后该视图就像表格一样使用:
SELECT*FROM all\u combined WHERE…