我正在学习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结果上传递真/假)
答案 0 :(得分:0)
尝试这样的连接:
table3
LEFT JOIN table2
ON table3.table3_id = table2.table3_id
LEFT JOIN table1
ON table2.table2_id = table1.table2_id