如何创建一个查询而不是两个单独的查询?

时间:2015-12-29 13:04:17

标签: php mysql pdo

我有两个这样的问题:

$stm = $db->prepare(" SELECT * from table1 where word = :word ");
$stm->bindValue(':word', $word, PDO::PARAM_STR);
$stm->execute();

$iterator = 0;
while ($end = $stm->fetch()) {

    foreach ($db-query(" SELECT * from table2 where id = $end['id']") as $row) {
        echo $row['title'];
    }

    $iterator ++;
}

现在我想知道,是否可以编写子查询而不是分开的查询?换句话说,如何在一个查询中编写这两个查询?

4 个答案:

答案 0 :(得分:2)

您的问题的答案是您可以在数据库中执行此操作。你应该。

典型的回答是您应该学习join。但是,在这种情况下,inexists更合适:

select t2.*
from table2 t2
where t2.id in (select id from table1 where word = :word);

我确实感到惊讶的是,连接这两个表的条​​件位于两个表中名为id的列上。

答案 1 :(得分:1)

您可以使用join来查看此查询

    SELECT table1.id, table2.title
    FROM table1
    INNER JOIN table2
    ON table1.id=table2.id;
    WHERE word = :word

您可以详细了解similar questions

答案 2 :(得分:1)

加入你的解决方案吗?

SELECT main.*, joinedTable.* FROM T1 as main
LEFT JOIN T2 as joinedTable
ON main.id=joinedTable.id
WHERE main.word = :word

我没试过......

答案 3 :(得分:1)

当然,您可以使用INNER JOIN

$stm = $db->prepare(" SELECT t2.* from 
                       table1 t1  INNER JOIN table2 t2 ON (t2.id = t1.id) 
                       WHERE t1.word = :word "); 
$stm->bindValue(':word', $word, PDO::PARAM_STR);
$stm->execute();

$iterator = 0;
while ($row = $stm->fetch()) {
   echo $row['title'];
   $iterator ++;
}