我有两个这样的问题:
$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 ++;
}
现在我想知道,是否可以编写子查询而不是分开的查询?换句话说,如何在一个查询中编写这两个查询?
答案 0 :(得分:2)
您的问题的答案是您可以在数据库中执行此操作。你应该。
典型的回答是您应该学习join
。但是,在这种情况下,in
或exists
更合适:
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 ++;
}