MySQL查询从两个表中拉出,显示在正确的字段中

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中的特定客户端,如果没有链接,我希望无论如何都要显示容器.

希望我已经清楚地表达了自己的意见,任何指向正确方向的人都会受到赞赏.谢谢!

Mar*_*ams 5

使用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.