Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 MySQL在多个表中联接和查找_Php_Mysql_Inner Join - Fatal编程技术网

Php MySQL在多个表中联接和查找

Php MySQL在多个表中联接和查找,php,mysql,inner-join,Php,Mysql,Inner Join,我知道关于这件事有很多问题,但我无法理解,因为它们似乎是对我没有太多理解的直接回答 这就是我想做的: 我有三个表:fusers,tusers,lusers。他们 全部包含以下行:email 我想合并这三个表,并找出用户提交的变量$email是否已经存在于email行中 我知道使用内部连接和可能的联合都会奏效,但就我的一生而言,我找不到一个像样的教程或示例可以学习 有人吗 SELECT some_primary_id as id, 'fusers' as table_name FROM fuser

我知道关于这件事有很多问题,但我无法理解,因为它们似乎是对我没有太多理解的直接回答

这就是我想做的:

我有三个表:
fusers
tusers
lusers
。他们 全部包含以下行:
email

我想合并这三个表,并找出用户提交的变量
$email
是否已经存在于
email
行中

我知道使用内部连接和可能的联合都会奏效,但就我的一生而言,我找不到一个像样的教程或示例可以学习

有人吗

SELECT some_primary_id as id, 'fusers' as table_name FROM fusers WHERE email = '$email' UNION 
SELECT some_other_primary_id as id, 'tusers' as table_name FROM tusers WHERE email = '$email' UNION
SELECT some_misc_primary_id as id, 'lusers' as table_name FROM lusers WHERE email = '$email'
注意,我使用了
fusers\u id作为id
,因为union-select中的所有列都需要具有相同的名称

由于@njk,您可以使用
UNION ALL
,这将更快,因为
UNION
单独检查重复行并将其删除

语法:

(SELECT a as COMMON_COLUMN_1, b as COMMON_COLUMN_2, c as COMMON_COLUMN3 FROM xxx WHERE ...)
UNION
(SELECT d as COMMON_COLUMN_1, e as COMMON_COLUMN_2, f as COMMON_COLUMN3 FROM yyy WHERE ...)
UNION
(SELECT g as COMMON_COLUMN_1, h as COMMON_COLUMN_2, i as COMMON_COLUMN3 FROM zzz WHERE ...)
# where a,b,c are columns from table xxx ONLY
# where d,e,f are columns from table yyy ONLY
# where g,h,j are columns from table zzz ONLY
  • 文件:

简单地
UNION
用于将多个SELECT语句的结果组合到一个结果集中。

尝试以下方法:

select if(count(*) > 0, 1, 0) as exists from fusers f, tusers t, lusers l where f.email = "$email" or t.email = "$email" or l.email = "$email";
我有三张桌子:Fuser、Tuser、Luser。它们都包含行:email

我想合并这三个表,并找出用户提交的变量$email是否已经存在于email行中


您有三个表描述具有公共字段的用户?然后,答案(像往常一样)是规范化数据:所有公共数据都应该在一个表中

你能用外行的语言解释一下这是怎么回事吗。我想我了解一些。不应该
fusers\u id
be
fusers.id
?是否确实要使用
UNION
而不是
UNION ALL
?编辑了我的答案@njk-hmm不需要,因为我正在向每一行添加表名
“fuser”作为表名
UNION ALL
更快。当其中一个表中存在电子邮件时,这将返回1,当它不存在时,将返回0。这意味着我将执行大量操作,因为这些表非常庞大。简单地搜索变量更容易。对我来说,不,这是一个微不足道的操作,您可以通过使用视图来保留现有代码的功能。