我想做一些像...这样的事情。
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,以填充页面上的列表。
那么这是否是一种有效的方法,因为我的一些表可能没有很多主菜?或者我应该在一个表中包含所有主菜并为不同类别添加额外字段,并找到通过新字段填充页面的另一种方法?或者更好的想法?
感谢您的时间。
答案 0 :(得分: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;
答案 1 :(得分:0)
我会选择后者。
ID | Item | Description | Price | Type
然后使用如下查询:
SELECT * FROM items WHERE type='$type'
答案 2 :(得分: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'
答案 3 :(得分:0)
嗯,目前可能没有那么多主菜。但也许在未来?不要把自己放在角落里:)。
问自己这个问题; - 一篇文章属于多个类别?
如果否,则应创建至少2个表(一对多关系):
<强>类别强>
ID |标题|描述| ...
<强>制品强>
ID | CATEGORY_ID |标题|价格| ...
如果是,则应创建至少3个表(多对多关系):
<强>类别强>
ID |标题|描述| ...
<强>制品强>
ID | CATEGORY_ID |标题|价格| ...
<强> articles_categories 强>
的article_id | CATEGORY_ID
祝你好运:)