Php 插入列作为类型的标题

Php 插入列作为类型的标题,php,mysql,Php,Mysql,我有一个MySql表,我想按类型列出内容并插入标题。我将使用什么类型的查询 由此: | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Fa

我有一个MySql表,我想按类型列出内容并插入标题。我将使用什么类型的查询

由此:

| Fluffy   | Harold | cat        | f    | 1993-02-04 | NULL       |
| Claws    | Gwen   | cat        | m    | 1994-03-17 | NULL       |
| Buffy    | Harold | dog        | f    | 1989-05-13 | NULL       |
| Fang     | Benny  | dog        | m    | 1990-08-27 | NULL       |
| Bowser   | Diane  | dog        | m    | 1979-08-31 | 1995-07-29 |
| Chirpy   | Gwen   | bird       | f    | 1998-09-11 | NULL       |
| Whistler | Gwen   | bird       | f    | 1997-12-09 | NULL       |
| Slim     | Benny  | snake      | m    | 1996-04-29 | NULL       |
| Dalli    | Alli   | canine     | m    | 2001-12-20 | NULL       |
| Tara     | David  | canine     | f    | 2002-05-17 | NULL       |
| Mimi     | Alli   | guinea pig | m    | 2004-05-17 | NULL       |
为此:

<h2>Cat</h2>

<ul>
<li>Fluffy</li>
<li>Claws</li>
</ul>

<h2>Dog</h2>

<li>Buffy</li>
<li>Fang</li>
<li>Bowser</li>
</ul>
Cat
  • 毛茸茸的
  • 爪子
  • 巴菲
  • 鲍瑟

  • 等等。

    您的第一个问题是:

    SELECT DISTINCT type FROM table ORDER BY type ASC 
    
    有了PHP,我相信您可以从这个查询中得到一个结果并循环使用它。下一步是在循环中放置另一个查询,该查询提供属于当前类型的动物列表:

    SELECT name FROM table WHERE type='$type' ORDER BY name ASC
    

    $type
    只是保存当前类型的变量。我假定了列和表的名称,因此请根据您的代码进行更改。

    不要尝试使用SQL来完成所有这些操作(只需执行标准的select查询),使用PHP对结果进行分组,然后显示结果。最好的方法是使用一个对象为您进行分组,因为您可能会多次需要它。例如,您的类可以如下所示:

    <?php
    class Arrays
    {
        public static function group($array,$key)
        {
            if(NULL == $array)
                return NULL;
    
            $grouped = NULL;
    
            foreach($array as $item)
            {
                $grouped[$item[$key]][] = $item;
            }
    
            return $grouped;
        }
    }
    ?>
    
    
    
    您的用例可以是:

    <?php
    $result = ...; // The result of your database query.
    
    $grouped_by_type = Arrays::group($result,"type");
    
    foreach($grouped_by_type as $type => $group)
    {
        echo "<h2>".ucwords($type)."</h2>";
        echo "<ul>";
    
        foreach($group as $animal)
        {
            echo "<li>".$animal['first_name']."</li>"; // Assumes the query brought back first_name...
        }
    
        echo "</ul>";
    }
    ?>
    
    
    
    可能需要按类型进行排序,然后需要使用php.hmmm构建列表。。。它们可能是犬科动物,所以它们实际上可能是土狼、狼或其他类似的动物?在PHP中使用两个循环。第一:获取不同的动物类型,第二:在每个类型中显示所有具有这种类型的动物这是表示逻辑——我不会尝试通过SQL来实现这一点。只需按类型列排序即可。@Edga您能举例说明您的意思吗?如果您有1000种动物,您将运行1001个数据库查询。这会解决问题,但这不是一个好的解决方案,至少在99%的情况下是这样。也许最好是把它作为一个评论而不是一个答案来添加——我不知道,我是新来的,所以我真的不知道什么是最佳实践。鉴于这是现在公认的答案,OP(和其他阅读材料)可能会按照你所说的做——并可能将同样的解决方案应用到他/她遇到的其他问题上,这是IMO不正确的!)我没有具体说明任何方法。我只给出了SQL代码。我总是喜欢人们先玩一些东西,而不是直接给他们一个解决方案。特别是如果有什么帮助的话。此外,这样的循环也没什么问题:
    $r=mysqli\u查询($q);而($row=mysqli_fetch_assoc($r)){}
    ,如果您必须知道的话,这就是我稍后打算提出的建议