首页 > 解决方案 > mysql - 在一个查询中为同一个表选择两个条件的结果

问题描述

我正在努力获得正确的结果。我想测试两者是否存在,或者两者都存在。在results表中,“michael”存在而“mike”不存在。

$stmt = $dbnet->prepare("
    SELECT * FROM
        (SELECT cats AS cats1 FROM results WHERE name = :original) AS a,
        (SELECT cats AS cats2 FROM results WHERE name = :parsed) AS b
");

$binding = array(
    'original' => 'michael',
    'parsed' => 'mike'
);
$stmt->execute($binding);

$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

//if there was a result then output
if($results)
{
    echo '<pre>'.print_r($results,1).'</pre>';
}

即使“迈克尔”在数据库中,我也没有得到任何结果。

如果我进行测试,'original' => 'michael', 'parsed' => 'michael'我会得到结果......当然两者都相同,因为我为每个测试了相同的值:

Array
(
    [0] => Array
        (
            [cats1] => 6,11
            [cats2] => 6,11
        )

)

我期望的是以下之一:

不,我不能使用WHERE name = 'michael' OR name = 'mike',因为我在改变后所做的事情取决于两者都有结果还是只有一个或另一个。

标签: mysqlselect

解决方案


这就像预期的那样工作......两者总是需要一个结果,即使它是空的才能正确返回。

$stmt = $dbnet->prepare("
    SELECT
        IFNULL( (SELECT cats AS cats1 FROM results WHERE name = :original), '') AS a,
        IFNULL( (SELECT cats AS cats2 FROM results WHERE name = :parsed), '') AS b
");

推荐阅读