gpt4 book ai didi

php - SQL左连接多对多,只在左表中显示不同的ID

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:15 25 4
gpt4 key购买 nike

表A

ID Name
1 Peter
2 Mary
3 John

表B

ID Event
1 eventA
2 eventB
3 eventC

表C

ID aID bID
1 1 1
2 1 3
3 2 1

我是这样做的

Select Distinct a.ID, b.ID
From tableA as a
Left Join tableC as c
On a.ID = c.aID
Left Join tableB as b
On c.bID = b.ID

显示

1 Peter eventA
1 Peter eventC

我想要的输出如下

1 Peter eventA
eventC

我该怎么做?非常感谢。


修改:

实际显示的记录如下:

1 彼得
事件A
事件C

根据建议,它工作正常,但我想添加隐藏显示功能。

函数反向显示(d){

if(document.getElementById(d).style.display == "none") {

document.getElementById(d).style.display = " block ";

else { document.getElementById(d).style.display = "none";

选择不同的 a.ID、b.ID、b.Event

从表A作为一个

Left Join tableC as c

在 a.ID = c.aID 上

Left Join tableB as b

在 c.bID = b.ID 上

$lastId = "";
while($row = mysql_fetch_array($rs))
{
if ($lastId != $row[0]){
echo "<a href='javascript:ReverseDisplay(" . ($row[0]) . ")'>" . $row[0] . "</a>";
echo urldecode($row[1])." ";
$lastId = $row[0];
echo "<br/>";

//id needs to be unique to match javascript function
echo "<div id=" . ($row[0]) . " style='display:none;'>";
}

echo $row[2];

//that's the problem, </div> must print only one time when in the last loop of same a.id, but how???
echo "</div>"

}

如果我添加计数函数

选择不同的a.ID, b.ID, b.Event, count(a.id)

从表A作为一个

Left Join tableC as c

在 a.ID = c.aID 上

Left Join tableB as b

在 c.bID = b.ID 上

它只显示

1 彼得

事件A

//无法显示 eventC

//只循环一次

有人能帮忙吗?我已经尝试了好几天,但都失败了。非常感谢。

最佳答案

这是一个输出 (HTML) 格式问题,而不是 SQL 问题。 (理论上您可以使用子查询、案例和空值构建一个非常复杂的查询,但实际上没有必要去解决所有这些麻烦。)

如果执行此查询(注意 ORDER BY):

Select Distinct a.ID, a.Name, b.Event
From tableA as a
Left Join tableC as c
On a.ID = c.aID
Left Join tableB as b
On c.bID = b.ID
ORDER BY a.ID

然后在你的 PHP 中:

// I'm assuming you're using MySQLi in an OO fashion, but
// you can adjust this as needed. Also, I'm missing out
// all the HTML (except a <BR>) - you can add in whatever
// HTML formatting you require as per your desired layout
$lastId = null; // remember the last person ID we had
while ($row = $result->fetch_assoc()) {
if ($lastId != $row('ID') {
// different person, so show their name:
echo $row('Name');
// and update $lastId
$lastId = $row('ID');
}
// show the event and move to the next line:
echo $row('Event') . '<br>';
}

关于php - SQL左连接多对多,只在左表中显示不同的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35057350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com