当前位置: 首页 > 面试题库 >

用重复列显示PHP中的表

单于煌
2023-03-14
问题内容

我在MySQL数据库中有以下数据:

Autonum  ID  Name  MetaValue
1         1  Rose  Drinker
2         1  Rose  Nice Person
3         1  Rose  Runner
4         2  Gary  Player
5         2  Gary  Funny

我现在正在使用PHP工作,但是在使用C#,Java和其他语言时,却多次遇到此问题。

现在,我过去和现在的目标是以以下格式显示数据:

<table>
    <thead>
    <th>Name</th>
    <th>MetaValue1</th>
    </thead>
    <tbody>
           <tr>      
               <td>Rose</td>
                <td>
                    <ul>
                        <li>Drinker</li> 
                        <li>Nice Person</li>
                        <li>Runner</li>
                     </ul>
                </td>
            </tr>
            <tr>
                <td>Gary</td>
                <td>
                    <ul>
                         <li>Player</li>
                         <li>Funny</li>
                 </td>
                </tr>
        </tbody>

</table>

在创建一个代表我的SQL表的类之前,我已经解决了这个问题。然后我创建了一个DictionaryholdEmployeeId和class。

Dictionary<string,MyTable> MyData = new <string,MyTable>();
Table MyMetaData = new Table();
MyMetaData SomeMetaData=getMetaValueList();//imagine a web service that does that
MyData.add(EmployeeId,SomeMetaData);

我正在跳过步骤,但我希望您能理解我的意思。我可能只需要用什么关键字来称呼这种类型的问题。完成此操作的首选方式是什么?


问题答案:

由于某种原因,我不喜欢SQL解决方案。您要求数据库引擎加入字符串,然后使用PHP对其进行拆分。这就像重复的工作。另一个metavalue缺点是如果包含分隔符。

我的代码仅演示了如何在PHP中轻松地使用2维数组对数据进行分组,并且由编码器决定哪种方法从旧版mysql_ *或PDO中检索数据库中的数据。

// get result
$result = mysql_query("SELECT autonum,id,name,metavalue FROM table");

// loop through each row
while ($row = mysql_fetch_assoc($result)) {
    $table[$row['name']][] = $row['metavalue'];
}

// print it out
print_r($table);

无需将整个结果集临时存储到数组中。您可以先对数据进行排序,然后再按要对数据进行分组并跟踪状态的字段进行排序,从而直接进行迭代。

但是,我偏爱这种样式有两个原因,这是个人喜好(这不是必须做的解决方案):

  1. 通常,每个人都希望将逻辑和表示分开。数组中存储数据可以轻松地传递到模板引擎。我更喜欢使用PHP模板引擎,因为它易于实现并且运行速度很快。

  2. 我宁愿以略微的性能速度和内存使用量为代价,以提高可读性和可维护性。该算法简短易懂。如果性能是您的头等大事,则始终可以使用缓存,例如存储在文件中,存储在memcached中或将计算结果存储在数据库中。

的确,我们正在从不同的方面对数据进行分组,但是您假定的metavalue不包含分隔符(在您的代码中为|)。通过选择几乎无法使用的分隔符可以很容易地修复它metavalue。无论如何,您的解决方案在几乎所有情况下都可以正常使用,因为metavalue@jvelez所显示的将永远不会包含字符|。



 类似资料:
  • 我正在使用一个警报对话框,显示一个菜单在应用程序的开始,我想要对话框显示我的两个值,是“名称”从一个对象,这里是警报对话框的代码: 是包含字符串“name”的对象,包含数组

  • 我刚刚开始了一个游戏服务器,并在我的网站上做了一个简单的排行榜,上面显示了玩家的统计数据。我面临的问题是它会在表中显示重复的行。 我的意思是: 这是我的代码。 null null 我会得到一些帮助的。我不想要重复的条目,如果用户名已经列出。 编辑:这里是我试图从其中提取的2个表

  • 问题内容: 这个问题已经在这里有了答案 : 如何从MySQL数据库检索图像并显示在html标记中 (6个答案) 4年前关闭。 我试图显示存储在数据库的BLOB列中的图像; 我使用SELECT从数据库中获取数据,不对数据进行任何转换,并显示以下内容(从仅输出以下内容的脚本中显示): 请注意,chrome正在将内容大小显示为图像的正确大小以及正确的mime类型()。在头文件和ive检查数据库中的blo

  • 我正在尝试将图像从SD卡设置为,但它不起作用。我做错了什么?我确定该文件存在。 这是的代码: 以下是布局的代码: : 最后,图像200 × 149像素:

  • 给定一个数据集如下: 我需要根据Pandas中的列和过滤和显示所有重复的行。 通过下面的代码,我得到: 出: 但我希望结果如下: 我怎么能在熊猫里做到这一点?

  • 因此,我创建了一个user_login.php页面(由html组成,一个登录表单),表单是: 除此之外,我还有一个login.php脚本(见下文) 现在我知道我的connection.php可以工作了,因为我在网站的其他地方使用它。 我的问题是,当我在浏览器中浏览用户_login.php页面时,当我单击“登录”按钮时,它会将我带到www.website.com/login.php文件,但整个页面是