如何通过在PHP中连接两个查询来获得结果

时间:2018-04-06 05:57:12

标签: php mysql mysqli

我使用两个查询来获取结果,但我想让它们成为一个查询并执行它以获得结果。这是场景:

查询1:

select id from tableA where reference_id = 2

并获得" Id"我需要执行另一个查询

查询2:

Select * from tableB where id = "(Id coming from query one)"

是否可以使它们成为一个查询???如果是,那么请指导我。提前谢谢。

6 个答案:

答案 0 :(得分:2)

替代使用INNER JOIN。

SELECT tableA.id, tableB.column1, tableB.column2 FROM tableA
INNER JOIN tableB ON tableA.id = tableB.id
WHERE
tableA.reference_id = 2

答案 1 :(得分:2)

您可以使用加入或子查询

来创建它

使用子查询

Select * from tableB where id in (select id from tableA where reference_id = 2)

使用加入

Select table1.id, table1.column_name2, table2.ref_id, table2.column_name2 from table1 leftjoin table2 on table1.id=table1.ref_id where table2.column_name2=2

答案 2 :(得分:1)

是这样的

SELECT
   a.id,
   b.*
FROM
   tableB AS b
JOIN
   tableA as a ON a.reference_id = b.id
WHERE
   b.id = :id

:idPDO的命名占位符,我强烈推荐使用。

$stmt = $PDO->prepare($sql);
$stmt->execute([':id'=>2]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

现在乍一看你可能会认为这就像@Karlo Kokkak的回答。我正在使用Join而不是Inner Join。开玩笑,我知道他们是一回事。我只是想要一个更好的方式来表达它然后"它们是相同的东西"。

真正的区别在于我实际上使用reference_id作为外键字段。我首先用One关系排列表格,然后用Many关系排列第二。

tableB与tableA具有一对多关系,因为tableA中包含FK。因此,tableA中可以有许多引用tableB的记录。假设reference_id是FK,但我不知道它可能是什么。如果一个表中的id是主键,那么我认为这是一个可怕的设计,然后另一个表中的id是FK。

无论如何,我的桌子安排是倒退到那个,但IMO是正确的方式(在大多数情况下)。这可能是OP的过度。

最后一件事是我在我的预备声明中使用过。

干杯。

答案 3 :(得分:0)

简单。使用此代码。

SELECT * FROM tableA, tableB WHERE tableA.reference_id = 2 AND tableB.id=tableA.id;

答案 4 :(得分:0)

是的,您需要使用LEFT JOIN。

SELECT
    a.id,
    b.column_name as column_from_tableA,
    b.id,
    b.column_name as column_from_tableB
FROM tableA a
LEFT JOIN tableB b
    ON b.id = a.id
WHERE a.reference_id=2;

答案 5 :(得分:0)

带子查询;

SELECT column-names
  FROM table-name1
 WHERE value IN (SELECT column-name
                   FROM table-name2 
                  WHERE condition)

所以你的查询是=>

Select * from tableB where id IN (select id from tableA where reference_id = 2)