0

我有一个 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>

等等

4

2 回答 2

0

您的第一个查询是:

SELECT DISTINCT type FROM table ORDER BY type ASC 

使用您的 PHP,我相信您可以从此查询中获得结果并循环遍历它。下一个是在循环中放置另一个查询,为您提供属于当前类型的动物列表:

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

$type只是保持当前类型的变量。我假设列名和表名,所以请更改它以适合您的代码。

于 2013-02-04T15:40:30.783 回答
0

不要试图用 SQL 来做所有这些(只做一个标准的选择查询),使用 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>";
}
?>
于 2013-02-04T15:43:04.573 回答