MYSQL不会返回超过1个类别

时间:2017-04-18 18:24:00

标签: php mysql

我试图找到这个问题的答案,但我不能。

我有一个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');?>

非常感谢任何帮助!

1 个答案:

答案 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;

然后你所有的联接变得简单,快速......而且准确。