我的数据库中有两个表记录,如下所示:
表1列1:
topic_id name
21 my computer
表2,列如下:
reply_id topic_id message
1 21 blabla
2 21 blue
表2中的topic_id列是表1的外键
我想回复表2中的所有回复以及表1中的主题名称(#21)。所以,我做了这样的查询
$q="SELECT name, message
FROM table1
LEFT JOIN table2
ON table1.topic_id = table2.topic_id
";
但是,结果/输出返回主题的名称和仅一个回复,但不是预期的2(或全部)。我错过了什么吗?
我使用了LEFT JOIN,因为有些主题仍在等待回复。如果没有任何回复,主题的名称仍会在浏览器中打印。
我也尝试添加
GROUP BY table1.topic_id
但仍然没有运气!
你能帮忙吗?感谢编辑:为了澄清问题,我添加了PHP代码来获取记录,如下所示:
如您所知,名称只需打印一次。所以,我这样编码:
$tid = FALSE;
if(isset($_GET['qid']) && filter_var($_GET['qid'], FILTER_VALIDATE_INT, array('min_range'=>1) ) ){
// create the shorthand of the question ID:
$tid = $_GET['tid'];
// run query ($q) as shown above
$r = mysqli_query($dbc, $q) or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $q");
if (!(mysqli_num_rows($r) > 0) ){
$tid = FALSE; // valid topic id
}
}//isset($_GET['qid']
if ($tid) { //OK
$printtopic = FALSE; // flag variable to print topic once
while($content = mysqli_fetch_array($r, MYSQLI_ASSOC)){
if (!$printtopic) {
echo $content['name'];
$printtopic= TRUE;
}
}
} // end of $tid
// Print the messages if any:
echo $content['message'];
答案 0 :(得分:1)
使用内部联接
尝试此操作$q="SELECT name, message
FROM table1
INNER JOIN table2
ON table1.topic_id = table2.topic_id";
答案 1 :(得分:0)
尝试:
$q="SELECT table2.reply_id, table1.name, table2.message
FROM table2
LEFT JOIN table1
ON table1.topic_id = table2.topic_id
";
答案 2 :(得分:0)
在努力解决这个问题后,我发现问题是我必须将查询更改为INNER JOIN并添加WHERE子句,如下所示:
WHERE table2.reply_id = {the given topic_id}
然后它运作良好!
抱歉打扰你们所有人!