【问题标题】:how to show categories and subcategories from database如何显示数据库中的类别和子类别
【发布时间】:2013-10-24 18:11:35
【问题描述】:

我需要从两个表中获取数据,一个是类别表,第二个是子类别表。 在子类别表中,我正在保存类别表的主键。现在我需要从表中获取数组。首先我想显示类别名称及其子类别,然后是第二个类别及其子类别。这是我获取类别和子类别列表的代码。

include("admin/common/connection.php");
$userId= $_GET['user'];

if(isset($userId)) 
{
$select="select category_name,id from tbl_category where user_id='".$userId."'";
$query= mysql_query($select);
$var= array();
while($fetch_row= mysql_fetch_array($query))
{
  $cat_dish= $fetch_row['category_name'];

  $var['category'] = $cat_dish;
  $select_dish="select dish_photo,printer_location,printer_list,kitchen_display from tbl_category_dish where user_id='".$userId."' and cat_id='".$fetch_row['id']."'";
  $query_dish= mysql_query($select_dish);
  while($row= mysql_fetch_array($query_dish))
  {

    $var['dish_photo']= $row['dish_photo'];
    $var['printer_location']= $row['printer_location'];

  }

}
print_r($var);

}

【问题讨论】:

  • 仅供参考,您的代码容易受到 SQL 注入的影响,并且它使用了已弃用的 MySQL 扩展。我建议您切换到 MySQLi 或 PDO。如果你不这样做,至少使用mysql_real_escape_string() 来转义$_GET 输入变量。
  • 无法解决您的问题,但您应该使用 MySQL PDO 而不是那些已弃用的 mysql_ 函数。
  • net.tutsplus.com/tutorials/php/… 为什么需要 PDO 以及如何使用它
  • 好的,谢谢,我会在我的代码中更改它。但是你能告诉我我在获取类别和子类别数组方面做错了什么吗?

标签: php mysql


【解决方案1】:

我相信您正在寻找的是一个 JOIN 语句。下面的语句将替换您的两个查询,而只使用这个。

SELECT cd.dish_photo,cd.printer_location,cd.printer_list,cd.kitchen_display,   
    cat.category_name, cat.id   
FROM tbl_category_dish AS cd  
LEFT JOIN tbl_category AS cat ON cd.cat_id = cat.id 
WHERE cd.user_id = '".$userId."'

这些物品还可以帮助您学习和发展自己的技能。
1)如上所述,尝试PDO to prevent SQL injection
2) 检查数据库表的设置。了解database relations

【讨论】:

    【解决方案2】:

    不要评论你的方法中的不安全感,而是回答问题,你可以在一个查询中做到这一点

    $sql="select 
        a.category_name,
        a.id,
        b.dish_photo,
        b.printer_location,
        b.printer_list,
        b.kitchen_display 
        from tbl_category a, 
        tbl_category_dish 
        where user_id='" . $userid . "' 
        and b.cat_id=a.id";
    while($row=mysql_fetch_array($sql)){
        if(!isset($var[$row["category_name"]])){
            $var[$row["category_name"]]=array();
        }
        $var[$row["category_name"]][]=$row;
    }
    print_r($var);
    

    【讨论】:

    • 我已经尝试过了,但它没有显示所有类别。它仅显示那些具有子类别的类别。我需要显示所有类别的天气它是否有 subcat。
    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2015-10-15
    相关资源
    最近更新 更多