我正在尝试从表中获取信息。
我有板和子板。sub_id
表中的列board
告诉我板子是否是子板。如果它是子板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>";
}
?>
这在一定程度上起作用。它在子板页面上正确显示父板,但在父板页面上也错误地显示它。
编辑2:
在 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'