我试图找到这个问题的答案,但我不能。
我有一个3表格式的mqsql数据库。 我使用1个表来添加所有产品信息,CarpetInfo, 1表列出我的分类,CarpetCategories, 和1表为产品添加类别,CarpetCategorySort。
我的CarpetCategorySort表有3列,制造商,样式,类别ID。 例如,制造商= Aladdin,Style = Alma Mater,CategoryID = 14/15/18/19/20/21/67 /
我的CarpetCategories表有2列CategoryID和Category。 2例子是CategoryID = 14,Category = Commercial& CategoryID = 15,Category =商业循环
当我在下面的$ category变量中输入Commercial时,我只能得到代码。如果我在$ category变量中键入Commercial Loop,代码将不起作用。这就像它只会拉出第一个数字14而忽略所有其他数字。定价顺序和其他一切正常,而不是CategoryID部分。
这是我的代码。
<?php $mill = "Aladdin"; $category = "Commercial Loop";
$order = mysqli_query($con, "
SELECT * FROM CarpetInfo JOIN CarpetCategorySort USING (Manufacturer, Style)
JOIN CarpetCategories USING (CategoryID)
WHERE Manufacturer='$mill' AND Category LIKE '%$category%'
order by Price = 0, Price asc,
Style asc");
include($_SERVER['DOCUMENT_ROOT'].'/includes/pricing/carpet-order-test.htm');?>
非常感谢任何帮助!
答案 0 :(得分:0)
这是一种处理事物的落后方式,一个带有几个数据点的字段一起被粉碎,就像真的从来没有任何理由存在。我将地毯列在一个表中,列出另一个表中的类别,最后在另一个表中列出两者的交叉引用,在这两个表中,两端都有多对一的关系。
只有当您认为为每个类别提供重复信息并且/或者您无法控制类别的用户输入(例如,您不仅仅使用下拉菜单)时,您才需要实际的类别表给出一个名字选择)。
类似的东西:
CREATE TABLE IF NOT EXISTS `carpets` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`abbrev` varchar(10),
`description` varchar(250),
[...]
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `carpet_categories` (
`id` int(11) NOT NULL,
`carpet_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
[...]
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `carpet_category_info` (
`id` int(11) NOT NULL,
`price-per-sqf` int(11) NOT NULL,
`name` varchar(50),
[...]
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
然后你所有的联接变得简单,快速......而且准确。