Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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 在一个查询中组合多个sql/mysql查询_Php_Sql_Join - Fatal编程技术网

Php 在一个查询中组合多个sql/mysql查询

Php 在一个查询中组合多个sql/mysql查询,php,sql,join,Php,Sql,Join,我有五张桌子。即用户、参考文献1、参考文献2、参考文献3和问题 我连续发出4个查询: 查询1:使用左联接从用户表和问题中获取数据 select u.user_name,u.user_emailid,u.user_mobno, q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que

我有五张桌子。即用户、参考文献1、参考文献2、参考文献3和问题

我连续发出4个查询:

查询1:使用左联接从用户表和问题中获取数据

select u.user_name,u.user_emailid,u.user_mobno,
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from user u
LEFT JOIN question q
on u.user_id = q.user_id
WHERE q.flag = 1
select r1.ref_name,r1.ref_email,r1.ref_mobno,
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_1 r1
left join question q
on r1.ref_id_1 = q.ref_id_1
select r2.ref_name,r2.ref_email,r2.ref_mobno,  
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_nam e,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_2 r2
left join question q
on r2.ref_id_2 = q.ref_id_2
select r3.ref_name,r3.ref_email,r3.ref_mobno,  
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_3 r3
left join question q
on r3.ref_id_3 = q.ref_id_3
查询2:使用左联接从用户表和引用_1获取数据

select u.user_name,u.user_emailid,u.user_mobno,
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from user u
LEFT JOIN question q
on u.user_id = q.user_id
WHERE q.flag = 1
select r1.ref_name,r1.ref_email,r1.ref_mobno,
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_1 r1
left join question q
on r1.ref_id_1 = q.ref_id_1
select r2.ref_name,r2.ref_email,r2.ref_mobno,  
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_nam e,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_2 r2
left join question q
on r2.ref_id_2 = q.ref_id_2
select r3.ref_name,r3.ref_email,r3.ref_mobno,  
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_3 r3
left join question q
on r3.ref_id_3 = q.ref_id_3
查询3:使用左联接从用户表和引用_2获取数据

select u.user_name,u.user_emailid,u.user_mobno,
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from user u
LEFT JOIN question q
on u.user_id = q.user_id
WHERE q.flag = 1
select r1.ref_name,r1.ref_email,r1.ref_mobno,
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_1 r1
left join question q
on r1.ref_id_1 = q.ref_id_1
select r2.ref_name,r2.ref_email,r2.ref_mobno,  
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_nam e,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_2 r2
left join question q
on r2.ref_id_2 = q.ref_id_2
select r3.ref_name,r3.ref_email,r3.ref_mobno,  
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_3 r3
left join question q
on r3.ref_id_3 = q.ref_id_3
查询4:使用左联接从用户表和引用_3获取数据

select u.user_name,u.user_emailid,u.user_mobno,
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from user u
LEFT JOIN question q
on u.user_id = q.user_id
WHERE q.flag = 1
select r1.ref_name,r1.ref_email,r1.ref_mobno,
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_1 r1
left join question q
on r1.ref_id_1 = q.ref_id_1
select r2.ref_name,r2.ref_email,r2.ref_mobno,  
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_nam e,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_2 r2
left join question q
on r2.ref_id_2 = q.ref_id_2
select r3.ref_name,r3.ref_email,r3.ref_mobno,  
  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7
from reference_3 r3
left join question q
on r3.ref_id_3 = q.ref_id_3
现在需要将所有4个查询合并到一个查询中以显示数据

我尝试将所有这些查询合并到一个查询中

select u.user_name,u.user_emailid,u.user_mobno,

q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,

r1.ref_name,r1.ref_email,r1.ref_mobno,  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,

r2.ref_name,r2.ref_email,r2.ref_mobno,  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,

r3.ref_name,r3.ref_email,r3.ref_mobno, q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7

from user u
LEFT JOIN question q
on u.user_id = q.user_id
WHERE q.flag = 1
LEFT JOIN reference_1 r1
LEFT JOIN question q1
on r1.ref_id_1 = q1.ref_id_1
LEFT JOIN reference_2 r2
LEFT JOIN question q2
on r2.ref_id_2 = q2.ref_id_2
LEFT JOIN reference_3 r3
LEFT JOIN question q3
on r3.ref_id_3 = q3.ref_id_3

但是这个查询不起作用。

因为你搞砸了语法顺序

多重联接的工作原理如下:

select u.user_name,u.user_emailid,u.user_mobno,     q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.    que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,

r1.ref_name,r1.ref_email,r1.ref_mobno,   q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.    que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,

r2.ref_name,r2.ref_email,r2.ref_mobno,  q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.    que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7,

r3.ref_name,r3.ref_email,r3.ref_mobno, q.que1_name,q.qa1,q.que2_name,q.qa2,q.que3_name,q.qa3,q.que4_name,q.qa4,q.que5_name,q.qa5,q.    que6a_name,q.qa6a,q.que6b_name,q.qa6b,q.que7_name,q.qa7

from question q
LEFT JOIN user u USING(user_id)
LEFT JOIN reference_1 r1 USING(ref_id_1)
LEFT JOIN reference_2 r2 USING(ref_id_2)
LEFT JOIN reference_3 r3 USING(ref_id_3)
WHERE q.flag = 1
最后一定在哪里。。。 联接必须完全声明,不能混合。在依赖项工作的顺序中,您可以毫无问题地拥有sub和subsub等依赖项

有一件事做得很好:在两个联接表中为外键设置了相同的名称。
在这种情况下,您可以简单地替换r1.t1=r2.t2,并使用t1在函数中定义联接表:

试试这个查询。对问题表上的参考表使用嵌套联接

   SELECT u.user_name
    ,u.user_emailid
    ,u.user_mobno
    ,q.que1_name
    ,q.qa1
    ,q.que2_name
    ,q.qa2
    ,q.que3_name
    ,q.qa3
    ,q.que4_name
    ,q.qa4
    ,q.que5_name
    ,q.qa5
    ,q.que6a_name
    ,q.qa6a
    ,q.que6b_name
    ,q.qa6b
    ,q.que7_name
    ,q.qa7
    ,r1.ref_name
    ,r1.ref_email
    ,r1.ref_mobno
    ,r2.ref_name
    ,r2.ref_email
    ,r2.ref_mobno
    ,q.que1_name
    ,r3.ref_name
    ,r3.ref_email
    ,r3.ref_mobno
FROM dbo.user u
LEFT JOIN question q
LEFT JOIN reference_1 r1 ON r1.ref_id_1 = q.ref_id_1
LEFT JOIN reference_2 r2 ON r2.ref_id_2 = q.ref_id_2
LEFT JOIN reference_3 r3 ON r3.ref_id_3 = q.ref_id_3 ON u.user_id = q.user_id
WHERE q.flag = 1

有一个问题很明显,q.flag=1,应该放在末尾。事实上,这就是解决方法:你应该把它作为答案发布;阿比克脉轮不,它不工作。我在你的sql语法中得到1064错误你得到了什么错误?嗯,我看到重复选择这是不允许的。您首先选择了q.que1_name、q.qa1、q.que2_name,然后在第3、第4和第5行再次添加它们。删除重复选择。Steini无法使用此查询获取任何引用名称、引用电子邮件、引用移动。Steini无法使用查询获取引用1、引用2和引用3记录,感谢您指导我使用函数