mysql - 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
)
)
我期望的是以下之一:
- 没有结果意味着 michael 或 mike 都不存在
- 猫 1 的结果,猫 2 的结果为空(迈克尔存在,迈克不存在)
- cat1 为空,cats2 为空(mike 存在,michael 不存在)
不,我不能使用WHERE name = 'michael' OR name = 'mike'
,因为我在改变后所做的事情取决于两者都有结果还是只有一个或另一个。
解决方案
这就像预期的那样工作......两者总是需要一个结果,即使它是空的才能正确返回。
$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
");
推荐阅读
- android - Android `Reformat code` 选项重新排列我的视图在布局中的顺序
- c# - How to export sql data to xml that includes an xml schema?
- bash - 循环读取文件并使用 shell 将其写入另一个文件
- c - How to keep sending signals to children from parent process repeatedly?
- angular - 角度 matSelect 未填充
- c# - 在 MSTest TestContext 中存储数据或在 TestRun 期间存储数据的其他方式
- swift - 在我使用 MCEAppDelegate 更新 main.m 文件后,替换为 AppDelegate 类
- mysql - Caused by: io.debezium.text.ParsingException: extraneous input 'ASC' expecting
- android - 如何使工具栏与片段中的内容一起滚动?
- batch-file - 比较file1和file2的内容并输出结果