查询一个表,如果没有数据,则查询另一个表

时间:2017-03-20 14:09:22

标签: php mysql select pdo

我将相同的数据存储在两个表中: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

3 个答案:

答案 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'];
        }

    }

    ?>

结果:

enter image description here

表a中的id不是1时的结果

enter image description here

答案 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;