Php 如何从数据库中以类别显示数据?

Php 如何从数据库中以类别显示数据?,php,mysql,Php,Mysql,因此,我的网站允许用户创建联系人列表,现在我添加了用户命名的类别。我当前正在使用SQL查询生成的关联数组的while循环显示联系人列表 看起来是这样的: Contacts: Contact 1 Contact 2 Contact 3 Contacts: Category 1 Contact 1 Contact 2 Contact 3 Category 2 Contact 1 Contact 2 Contact 3 现在我在数据库中有了一个联系人类别的新列,我不知道如何按顺序排列,以及如何显

因此,我的网站允许用户创建联系人列表,现在我添加了用户命名的类别。我当前正在使用SQL查询生成的关联数组的while循环显示联系人列表

看起来是这样的:

Contacts:
Contact 1 
Contact 2
Contact 3
Contacts:
Category 1
Contact 1
Contact 2
Contact 3
Category 2
Contact 1
Contact 2
Contact 3
现在我在数据库中有了一个联系人类别的新列,我不知道如何按顺序排列,以及如何显示联系人类别的名称。我试图让它看起来像这样:

Contacts:
Contact 1 
Contact 2
Contact 3
Contacts:
Category 1
Contact 1
Contact 2
Contact 3
Category 2
Contact 1
Contact 2
Contact 3
我的实际代码(如果需要):

<?php
                //START CONTACTS LOOP       
            $contacts_query = "SELECT id, name FROM contacts WHERE ownerid = '$userID' ORDER BY `name` ASC";
            $run_contacts_query = mysql_query($contacts_query);

            if($run_contacts_query){

                while($c_data = mysql_fetch_assoc($run_contacts_query)){
                    $id = $c_data['id'];
                    $name = $c_data['name'];
                    ?>
                    <li><a href="contact.php?id=<?=$id?>"><?=$name?></a></li>
                    <?php
                    }} //END CONTACTS LOOP 
            ?>


  • 我认为最好的方法是在模式中使用不同的表来存储联系人和类别

     SELECT id, name FROM contact_categories WHERE ownerid = '$userID' ORDER BY `name` ASC;
    
    然后

     SELECT id, name FROM contacts WHERE ownerid = '$userID' and contact_categoryid = '$catid';
    

    只需检索类别并首先按类别排序,然后按名称排序即可。并检查类别是否与上一个不同:

    $contacts_query = "SELECT id, name, category";
    $contacts_query.= " FROM contacts";
    $contacts_query.= " WHERE ownerid = '$userID'";
    $contacts_query.= " ORDER BY `category`, `name` ASC";
    
    $run_contacts_query = mysql_query($contacts_query);
    
    if($run_contacts_query) {
        $currentCategory = null;
    
        while($c_data = mysql_fetch_assoc($run_contacts_query)){
            if ($c_data['category'] != $currentCategory) {
                echo '<li>' . $c_data['category'] . '</li>';
                $currentCategory = $c_data['category'];
            }
    
            echo '<li><a href="contact.php?id=' . $id . '">' . $name . '</a></li>';
        }
    } 
    
    $contacts\u query=“选择id、姓名、类别”;
    $contacts\u query.=“来自联系人”;
    $contacts_query.=“WHERE ownerid='$userID'”;
    $contacts\u query.=“按`category`排序,`name`ASC”;
    $run\u contacts\u query=mysql\u query($contacts\u query);
    如果($run\u contacts\u query){
    $currentCategory=null;
    而($c\u data=mysql\u fetch\u assoc($run\u contacts\u query)){
    如果($c_数据['category']!=$currentCategory){
    回显“
  • ”.$c_数据['category']。
  • ”; $currentCategory=$c_数据['category']; } 回音“
  • ”; } }
    您需要更改sql查询以通过联系人的ownerid和类别获取联系人

    <?php
                //CHANGE QUERY TO       
            $contacts_query = "SELECT id, name FROM contacts WHERE ownerid = '$userID' AND category = '$category' ORDER BY `name` ASC";
    
            $run_contacts_query = mysql_query($contacts_query);
    
            if($run_contacts_query){
                //You need to echo category here
                print("<h3>".$category.</h3>");
    
                while($c_data = mysql_fetch_assoc($run_contacts_query)){
                    $id = $c_data['id'];
                    $name = $c_data['name'];
                    ?>
                      <li><a href="contact.php?id=<?=$id?>"><?=$name?></a></li>
                    <?php
                    }} //END CONTACTS LOOP 
            ?>
    

    不是答案,但我只会停留在php模式,并回显
    li
    标记。另外:这是一个新项目吗?这是我的一个老网站的一个新功能。这可能是更好的方法。类别存储在哪里?同一张桌子/单独的桌子?它们存储在同一张桌子上。谢谢大家的帮助!现在开始工作了!即使需要查询两个表,也不需要单独查询。当然。但如果他将联系人和联系人类别信息存储在同一个表中,他将需要复制数据以将同一联系人添加到两个或多个类别中。正如我所说:我对两个表没有问题(根本没有问题),只是没有理由运行多个查询。如果我读对了你的答案,你就是这么做的。如果不是更好:-)你在哪里防止同一个类别显示两次?这取决于你如何编写代码,通常我会把它放在一个函数中,以category和userid作为参数,并用不同的参数调用它w!非常感谢你!这让它100%按照我的意愿工作。我希望我能投票给你,但我还没有15个名声。@LandonHammond,没关系。很高兴我能帮忙。