0

我正在学习 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 结果上传递真/假)

4

1 回答 1

0

试试这样的连接:

table3
LEFT JOIN table2
ON table3.table3_id = table2.table3_id
LEFT JOIN table1
ON table2.table2_id = table1.table2_id
于 2012-06-20T19:36:55.243 回答