为MySQL表中的每一行提供一个项目符号列表

时间:2014-10-20 22:19:53

标签: php mysql

我有一个像这样的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))对于新手来说相对容易学习,但这有点挑战..

1 个答案:

答案 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; ?>