0

我正在考虑做类似的事情...

Table Pants (20 entrees)  
| ID | Item | Description | Price   

Table Shirts (20 entrees)   
| ID | Item | Description | Price   

Table Socks (5 entrees)    
| ID | Item | Description | Price  

然后我在 $table 中运行一个 php foreach ID,以填充页面上的列表。

那么这是一种有效的方法吗,因为我的一些表可能没有很多主菜?或者我应该将所有主菜放在一个表中,并为不同的类别添加一个额外的字段,然后找到另一种通过新字段填充我的页面的方法?或者也许是一个更大的想法?

谢谢你的时间。

4

4 回答 4

1

您的模型不灵活且效率不高。您的第二个解决方案是创建一个名为 items 的表并添加一个名为 categories 的额外字段,该字段应该是外键。你可以查看这个http://sqlfiddle.com/#!2/74c91/1,这里就是你需要的数据库创建所需的代码:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET FOREIGN_KEY_CHECKS=0 */;

-- Dumping structure for table database.categories
CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- Dumping data for table database.categories: ~0 rows (approximately)
/*!40000 ALTER TABLE `categories` DISABLE KEYS */;
INSERT INTO `categories` (`id`, `name`, `created`) VALUES
    (1, 'Pants ', '2012-12-15 11:37:27'),
    (2, 'Shirts ', '2012-12-15 11:37:36'),
    (3, 'Socks ', '2012-12-15 10:38:47');
/*!40000 ALTER TABLE `categories` ENABLE KEYS */;


-- Dumping structure for table database.clothes
CREATE TABLE IF NOT EXISTS `clothes` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `item` varchar(255) NOT NULL,
  `description` text,
  `category_id` int(10) NOT NULL,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `category_id` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- Dumping data for table database.clothes: ~0 rows (approximately)
/*!40000 ALTER TABLE `clothes` DISABLE KEYS */;
INSERT INTO `clothes` (`id`, `item`, `description`, `category_id`, `created`) VALUES
    (1, 'red socks', 'Red Socks Rocks', 3, '2012-12-15 10:39:06'),
    (2, 'blue socks', 'nice socks too', 3, '2012-12-15 10:39:18'),
    (3, 'grey pants', 'pretty cool', 1, '2012-12-15 10:40:34'),
    (4, 'Blue Shirt', 'Nice blue shirt', 2, '2012-12-15 10:40:10');
/*!40000 ALTER TABLE `clothes` ENABLE KEYS */;
/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

这是检索数据的代码:

    SELECT 
clothes.id AS clotheId, 
clothes.item AS clotheItem, 
clothes.description AS clotheDescription, 
categories.id AS categoryId, 
categories.name AS categoryName 
FROM clothes 
LEFT JOIN categories 
ON clothes.category_id=categories.id;
于 2012-12-15T15:28:06.133 回答
0

我会选择后者。

 ID | Item | Description | Price | Type

然后使用如下查询:

SELECT * FROM items WHERE type='$type'
于 2012-12-15T15:22:38.707 回答
0

我不会将这些数据存储在单独的表中。创建一个表,然后包含一个关于项目类型的指示符。

与此类似:

create table ClothingItems
(
  id,
  typeid,
  item,
  description,
  price
);

create table clothingType
(
  typeid,
  name
);

然后查询您可以使用:

select *
from clothingitems i
left join clothingType t
  on t.typeid = t.typeid
where t.name = 'socks'
于 2012-12-15T15:24:18.663 回答
0

好吧,它目前可能没有那么多主菜。但也许在未来?不要把自己放在角落里:)。

问自己这个问题;-一篇文章可以属于多个类别吗?

如果否,您应该创建至少 2 个表(一对多关系):

类别

id|标题|描述|...

文章

id|category_id|标题|价格|...

如果是,您应该创建至少 3 个表(多对多关系):

类别

id|标题|描述|...

文章

id|category_id|标题|价格|...

文章_类别

article_id|category_id

祝你好运:)

于 2012-12-15T15:29:24.893 回答