Mat*_*son 0 php mysql select join
我试图在两个单独的表中选择所有字段,只要它们共享一个公共ID.
//mysql query
$result = mysql_query("SELECT * FROM project, links
WHERE project.id = links.id and project.id = $clientID")
//displaying the link
if ($row['url'] != null){
echo "<div class='clientsection' id='links'>Links</div>";
echo "<a class='clientlink' id='link1' href='" . $row['url'] . "'>" . $row['name'] . "</a>";
}
else {
echo "<a class='clientlink' id='link1' href='" . $row['url'] . "' style='display:none;'>" . $row['name'] . "</a>";
};
Run Code Online (Sandbox Code Playgroud)
如您所见,我的表是"项目"和"链接"每个都共享一个公共字段"id"供参考.看起来两者links.id and project.id
都相等,它输出任何东西,但是当没有links.id
与给定相关联时,$clientID
相对于$ clientID的容器根本不显示.
基本上我正在使用它来动态地将链接添加到此CMS中的特定客户端,如果没有链接,我希望无论如何都要显示容器.
希望我已经清楚地表达了自己的意见,任何指向正确方向的人都会受到赞赏.谢谢!
使用SQL ANSI显式连接语法,您可以指定a LEFT OUTER JOIN
,而不是INNER JOIN
在隐式连接中执行的操作.
即使连接表中没有匹配的行,LEFT OUTER JOIN也会在第一个表中返回结果:
SELECT * FROM project
LEFT OUTER JOIN links
ON links.id = project.id
WHERE project.id = $clientID
Run Code Online (Sandbox Code Playgroud)
对于链接表中没有匹配id的行,links.id将是NULL
.
编辑
如果你只想要第一个链接,自动增量主键links.linkid指定顺序,你可以这样做一个自连接:
SELECT * FROM project
LEFT OUTER JOIN links
ON links.id = project.id
LEFT OUTER JOIN links l2
ON l2.id = project.id AND l2.linkid < links.linkid
WHERE project.id = $clientID AND l2.id IS NULL
Run Code Online (Sandbox Code Playgroud)
这样做是连接任何linkid较小的链表行,然后在WHERE子句中排除这些行.您最终只得到没有较小linkid的行,因此每个项目的链接都是最小的linkid.