我将相同的数据存储在两个表中:tableA和tableB。我想先从tableA中选择,如果没有数据,我想使用tableB。 tableA和tableB保存完全相同的数据。我用tableB进行存档。有时我们会从tableA中删除数据,但它仍然存在于tableB中。
$q = $dbh->query("SELECT * FROM tableA WHERE id='1'");
if($q->fetchColumn==NULL){
$q = $dbh->query("SELECT * FROM tableB WHERE id='1'");
}
foreach($q->fetchAll() as $data):
echo $data['name'];
endforeach;
此代码的问题在于它从tableB返回,而tableA数据在那里。如何解决这个问题呢?请帮忙。
表A
id, name, age
1 john 45
表B
bid, id, name, age
1 1 old john 45
如果tableA中没有数据,我希望查询从tableB中选择。但如果TableA中有数据,我想从中选择(tableA)。我的代码输出来自tableB。
错误:
fetchColumn()==NULL//does not output anything
fetchColumn(0)==NULL//does not output anything
fetchColumn==NULL//outputs from tableB
fetchColumn==0//outputs from tableB
fetchColumn()==0/does not output anything
预期输出:约翰
PHP Version 7.1.1
答案 0 :(得分:0)
这样可以使用你给出的样本数据进行测试,正如Jay所说,当你使用fetchColumn()时,你需要指定至少一列。
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$q = $dbh->query("SELECT * FROM tablea WHERE id='1'");
$data = $q->fetchColumn(1); //name
if ($data) {
echo $data;
} else {
$q = $dbh->query("SELECT * FROM tableb WHERE id='1'")->fetchall();
foreach ($q as $data) {
echo $data['name'];
}
}
?>
结果:
表a中的id不是1时的结果
答案 1 :(得分:0)
很棒的问题,很棒的答案。
如果tableA中没有数据,我希望查询从tableB中选择。但如果TableA中有数据,我想从中选择(tableA)。
$stmt = $dbh->prepare("SELECT * FROM tableA WHERE id=?");
$stmt->execute([$id]);
$data = $stmt->fetch();
if (!$data) {
$stmt = $dbh->prepare("SELECT * FROM tableB WHERE id=?");
$stmt->execute([$id]);
$data = $stmt->fetch();
}
echo $data['name'];
带有大量查询的令人难以置信的复杂逻辑
答案 2 :(得分:-2)
万分感谢所有在这里帮助我的人。我通过添加另一个查询来检查第一个查询来解决我的问题。这个解决方案给了我想要的东西。
$id = 1;
$qr = $dbh->prepare("SELECT id, name, age FROM tableA WHERE id=:id");
$qr->execute(array(':id' => $id));
$res = $dbh->prepare("SELECT COUNT(*) FROM tableA WHERE id=:id");
$res->execute(array(':id' => $id));
$row = $res->fetchColumn();
if( $row <= 0){
unset($qr);
$qr = $dbh->prepare("SELECT * FROM tableB WHERE id=:id");
$qr->execute(array(':id' => $id));
}
$results = $qr->fetchAll();
foreach($results as $data):
echo $data['name'];//output is john
endforeach;