结合这些MySQL查询

时间:2012-06-20 19:27:24

标签: mysql join pdo

我正在学习MySQL并搞乱连接。我想知道我是否可以减少这些查询并将它们组合起来。这就是我一般会做的事情:

$stmt = $db_pdo->prepare('SELECT date, table2_id, comments 
                          FROM table1 
                          WHERE user = "victor"');
$stmt->execute();
foreach ($stmt as $row) {
  $table2_id = $row['table2_id'];
}

$stmt = $db_pdo->prepare('SELECT table3_id 
                          FROM table2 
                          WHERE table2_id = '.$table2_id.'');
$stmt->execute();
foreach ($stmt as $row) {
  $table3_id = $row['table3_id'];
}

$stmt = $db_pdo->prepare('SELECT previous_comments_count 
                          FROM table3 
                          WHERE table3_id = '.$table3_id.'');
$stmt->execute();
foreach ($stmt as $row) {
  $table3_id = $row['table3_id'];
}

(我改变了变量,所以它看起来很愚蠢 - 我没有为这家公司设计表格)

基本上,我需要从第一个表中获取大部分信息,但是有一个“id”需要跨越我希望放入第一个查询的两个表。

所以我尝试的是:

$stmt = $db_pdo->prepare('SELECT date, table2_id, comments 
                          FROM table1 
                          LEFT JOIN table2 
                                 ON table1.table2_id = table2.table2_id 
                          LEFT JOIN table3 
                                 ON table2.table3_id = table3.table3_id 
                          WHERE user = "victor"');

显然我的第一个(以及此行的许多调整版本)都失败了,导致空白获取。

我可以进行第一次左连接,但即使这样也不会显示第二个表中的信息。第二个和第三个表与第一个表的列不同。 (我不认为这是一个问题,但我可能是错的。)

我已经在各种网站上做了一些阅读,虽然我喜欢自己解决问题,但我认为最好先问一下我想要完成的工作是否可行并尽快完成工作。我已经读过这样的其他一些问题了,但我只是简单地迷茫地看着这些的复杂性,更不用说那些了。 (这是其中一天......)

我可能也是第一次使用pdo和预备语句,我不认为这是问题所在,但如果是这样,我会道歉。我不是MySQL的天才,也没有花太多时间在数据库上。

另外(附带问题,如果允许的话):我是否必须使用foreach?或者我可以相信在执行后调用$ stmt是否足够好? (AKA在应该出现的ONE结果上传递真/假)

1 个答案:

答案 0 :(得分:0)

尝试这样的连接:

table3
LEFT JOIN table2
ON table3.table3_id = table2.table3_id
LEFT JOIN table1
ON table2.table2_id = table1.table2_id