Php 如何从数据库中以类别显示数据?
因此,我的网站允许用户创建联系人列表,现在我添加了用户命名的类别。我当前正在使用SQL查询生成的关联数组的while循环显示联系人列表 看起来是这样的: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 现在我在数据库中有了一个联系人类别的新列,我不知道如何按顺序排列,以及如何显
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,没关系。很高兴我能帮忙。