如何从数据库中选择它们以显示类别(表2)中parent_id下的所有产品(表1)?
例如,我想使用 cat.php?id=1 等链接显示/列出parent_id = 1(童装)下的所有产品,包括每页子类别下的所有产品
父类别 ID #1
- 产品#1 > 类别 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);
最佳答案
实际上,据我了解您的问题,就是这样。
您有三个不同的表。
第一。名为的父类别我保留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>';
}
就是这样。
谢谢。
关于php - 选择parent_id下的所有产品(表1)(表2 =类别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19897394/