我有一个像这样的mysql表:
name1 | dllink1 | dltarget1 | dllink1Text | link2 | dltarget2 | dllink2Text | link3 | dltarget3 | dllink3Text | ... | link10
name2 | dllink1 | dltarget1 | dllink1Text | link2 | dltarget2 | dllink2Text | NULL | NULL | NULL | ... | link10
... | ... | ... | ... | ... | ... | ... | ... | ...
只要链接不是NULL,我想输出每个名称的项目符号列表:
<dl>name1<dl/>
<li><a href="dllink1" target="dltarget1>dllink1Text</a></li>
<li><a href="dllink2" target="dltarget2>dllink2Text</a></li>
<li><a href="dllink3" target="dltarget2>dllink3Text</a></li>
<dl>name2<dl/>
<li><a href="dllink1" target="dltarget1>dllink1Text</a></li>
<li><a href="dllink2" target="dltarget2>dllink2Text</a></li>
<dl>name3<dl/>
<li><a href="dllink1" target="dltarget1>dllink1Text</a></li>
...
('dltarget(x)'在表格中为_self
,_blank
等。
实现这一目标的最佳和最正确的方法是什么?在$row['name']
中获取值while($row = @mysql_fetch_array($rs))
对于新手来说相对容易学习,但这有点挑战..
答案 0 :(得分:0)
首先,您的SQL表未正确规范化。你应该把它分成两个表(这将使它更容易扩展,维护和理解) - 说链接和link_groups(为了参数起见,因为我不完全了解上下文)。您的链接表可以包含&#34; href&#34;,&#34; target&#34;,&#34; title&#34;和&#34; link_group_id&#34;作为将您的链接与您的link_group相关联的foriegn键,您的link_groups可以自动增加&#34; id&#34;作为主键和&#34;名称&#34;字段来标识该组。
一旦完成这个问题,有很多方法可以解决这个问题,一个简单的(虽然有点吵)方法如下......
注意,第二个块中的替代PHP语法(这是假设前端代码)。您可以随意对其进行编码 - (即将PHP以传统形式放在一个整个块中)。
<?php
$links = []; // only use this alternative array syntax if using PHP 5.4+
// your recordset for links
while ($row = mysql_fetch_object($rs)) {
$links[$rs->link_group_id][] = $row;
}
?>
<!-- your recordset for link groups -->
<?php while ($row = mysql_fetch_object($rs)): ?>
<dl>
<dt><?php echo($row->name); ?></dt>
<?php foreach ($links[$row->id] as $link): ?>
<dd>
<a href="<?php echo($link->href); ?>"
target="<?php echo($link->target); ?>"><?php echo($link->title); ?></a>
</dd>
<?php endforeach; ?>
</dl>
<?php endwhile; ?>