【发布时间】:2013-11-14 12:45:52
【问题描述】:
我正在尝试从表格中获取信息。
我有板子和子板子。表board 中的sub_id 列告诉我板子是否是子板。如果是子板则父板的id为值,如果不是则单元格为空。
我写这个是为了显示一个板是否有任何子板:
<?php
$data = mysql_query("SELECT * FROM board WHERE sub_id='$boardId'")
or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
Print "<br>Sub-collections:<br>";
Print "<font size='5pt'><a href='/board/index/".$info['id']."'>".$info['board_name']." </a></font>";
}
?>
这很好用。
现在我想编写一个类似的代码来命名父板(如果板是子板),但这是我遇到问题的地方。
我想出了:
<?php
$data = mysql_query("select * from board WHERE id='$boardId' AND sub_id IS NOT NULL") or die(mysql_error());
$issub = mysql_fetch_array($data);
?>
然后使用...
<?php if(($issub)): ?>
<?php echo $issub['sub_id'] ?>
<?php else: ?>
<?php endif ?>
显示。
问题在于没有join,除了母板的id,我无法显示任何内容。我不知道要加入哪些列才能提取board_name 等信息。
编辑:
popovitsj 的建议:
<?php
$data = mysql_query("SELECT * FROM board b WHERE EXISTS(SELECT * FROM board WHERE b.id = sub_id)") or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
Print "<br>Sub-collection of:<br>";
Print "<font size='5pt'><a href='/board/index/".$info['id']."'>".$info['board_name']." </a></font>";
}
?>
这在一定程度上有效。在子板页面上正确显示父板,但在父板页面上也错误显示。
EDIT2:
根据 Meier 的建议研究 LEFT JOIN 后,我最终使用以下代码使其工作:
SELECT * FROM board a LEFT JOIN board b ON a.sub_id = b.id WHERE a.sub_id LIKE b.id AND a.id='$boardId'
【问题讨论】:
-
有点混乱,您称列引用父子板。你应该把它叫做 parent_board。
-
很难理解您的表格是什么样的。你能说清楚一点吗?
-
不是。这是
sub_id。我希望能够在尽可能少的列中做到这一点。 -
只有一张桌子 =
board。其中包含有关用户创建的板的信息:id、board_name、user_id、description、time_created。我添加了一个新列:sub_id。这使用户能够将一个板指定给另一个板。例如,如果他们选择将 ID 为56和102的板链接在一起作为 56 的子板 102。在板 102 的列sub_id中,值将是56。这告诉我板 102 是板 56 的子板。板 56 的数据没有任何改变。我只是使用 sql 检查它的id是否被用作sub_id。 -
是的,这令人困惑。想一想,sub_id 指的是什么?它是指 sub_board 吗?不,它指的是 sub_board 的父级。