【问题标题】:Select all products (table1) under parent_id (table2 = categories)选择 parent_id (table2 = categories) 下的所有产品 (table1)
【发布时间】:2013-11-22 17:25:17
【问题描述】:

如何从数据库中选择它们以显示类别 (table2) 中 parent_id 下的所有产品 (table1)?

例如,我想使用 cat.php?id=1 之类的链接显示/列出 parent_id = 1(儿童服装)下的所有产品,包括每页子类别下的所有产品

父类别 ID #1

  • 产品#1 > category_id #5
  • 产品#2 > category_id #10
  • 产品#3 >> category_id #16
  • 产品#4 >> category_id #20

父类别 ID #2

  • 产品#5 > category_id #31
  • 产品#6 > category_id #33

父类别 ID #3

  • 产品#7 > category_id #27
  • 产品#8 > category_id #29

这是我到目前为止所拥有的,但它仍然没有显示父类别中的所有产品 sqlfiddle

SELECT * FROM products
LEFT JOIN categories
ON products.category = categories.category_id
GROUP BY (SELECT parent_id
          FROM categories
          WHERE parent_id = 1  
          GROUP BY parent_id)

数据库:类别

CREATE TABLE IF NOT EXISTS `categories` (
`category_id` int(10) NOT NULL AUTO_INCREMENT,
`parent_id` int(10) DEFAULT NULL,
`title` varchar(255) NOT NULL,
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

数据库:产品

CREATE TABLE IF NOT EXISTS `products` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`product` varchar(255) DEFAULT NULL,
`description` longtext DEFAULT NULL,
`category` int(10) DEFAULT NULL,
`color` varchar(255) DEFAULT NULL,
`sizes` varchar(255) DEFAULT NULL,
`style` varchar(255) DEFAULT NULL,
`material` varchar(255) DEFAULT NULL,
`stock` varchar(255) DEFAULT NULL,
`ws_price` decimal(6,2) DEFAULT NULL,
`rt_price` decimal(6,2) DEFAULT NULL,
`sp_code` varchar(255) DEFAULT NULL, 
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

类别的结构

  • 童装
  • --大童服饰
  • -------上衣和T恤
  • --------裙子和裤子
  • --男婴和女婴
  • --------连身衣/连体衣
  • --------婴儿用品
  • --------婴儿护理和玩具
  • --服装套装 --------中性

查看产品的代码(示例):

$getid = $_GET['id'];
$q = mysqli_query($con,"
SELECT products.*, categories.*
FROM products, categories
WHERE products.category = categories.category_id
GROUP BY categories.parent_id= $getid
");
while($row = mysqli_fetch_array($q, MYSQLI_ASSOC)){
$id = $row['id'];
$product = $row['product'];
$cat = $row['category'];

$c = mysqli_query($con,"SELECT title FROM categories WHERE category_id = $cat"); 
    while($r = mysqli_fetch_array($c)){ 
    $pcat= $r['title']; }

echo '<p>ID#'.$id.'-'.$product.' (Category#'.$cat.'-'.$pcat.')</p>';
}
mysqli_close($con);

【问题讨论】:

    标签: php mysql loops select fetch


    【解决方案1】:

    其实我理解你的问题,就是这样。

    您有三个不同的表。

    第一。父类别名为 i 保留 parent_category(id, name) 而 id 是主键。

    第二。您有子类别表,名为类别。正如您在上面的问题中已经定义的那样。我在你的桌子上做了一处改动。我将外键添加到 parent_id。

    CREATE TABLE IF NOT EXISTS `categories` (
    `category_id` int(10) NOT NULL AUTO_INCREMENT,
    `parent_id` int(10) DEFAULT NULL,
    `title` varchar(255) NOT NULL,
    PRIMARY KEY (category_id),
    Foreign Key (parent_id) REFERENCES parent_category(id)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    

    第三。你有一个产品表。我还为类别添加了一个外键。

    CREATE TABLE IF NOT EXISTS `products` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `product` varchar(255) DEFAULT NULL,
    `description` longtext DEFAULT NULL,
    `category` int(10) DEFAULT NULL,
    `color` varchar(255) DEFAULT NULL,
    `sizes` varchar(255) DEFAULT NULL,
    `style` varchar(255) DEFAULT NULL,
    `material` varchar(255) DEFAULT NULL,
    `stock` varchar(255) DEFAULT NULL,
    `ws_price` decimal(6,2) DEFAULT NULL,
    `rt_price` decimal(6,2) DEFAULT NULL,
    `sp_code` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (id),
    Foreign Key (category) REFERENCES categories(category_id)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    

    现在您想查看其父类别中的产品。

    所以下面是代码。

    $getid = 1;
    $query = mysql_query("SELECT products.*,categories.* from products, categories, parent_category WHERE products.category=categories.category_id AND parent_category.id=categories.parent_id AND parent_category.id=$getid");
    while($record = mysql_fetch_array($query)) {
        echo '<p>ID#'.$record['id'].'-'.$record['product'].' (Category#'.$record['category_id'].'-'.$record['parent_id'].')</p>';
    }
    

    就是这样。

    谢谢。

    【讨论】:

    • 感谢您的帮助~我设法让它在我的表中添加外国 id~:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多