基本上我拥有的是一个图片库。只是试图创建一个用于学习目的。我现在所拥有的是,当他/她单击类别时,会触发以下用于选择画廊的 mysql 查询:
从画廊 WHERE 中选择 ID、名称、gallery_thumb category1=$category_id 或 category2=$category_id 或 category3=$category_id ORDER BY ID DESC
这只是我拼凑起来的一个快速而糟糕的解决方案。基本上我希望一个画廊出现在许多类别中。在这里,我在创建画廊时这样做了,我可以将其添加到三个或更少的类别中,因此一个画廊可能会出现在不同的类别中。但这个灵魂不是我想要的。
画廊表:
创建表`画廊`(
`ID` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(1000) 字符集 utf8 整理 utf8_unicode_ci 非空, `description` varchar(1000) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `category1` varchar(500) 字符集 utf8 整理 utf8_unicode_ci 非空, `category2` varchar(500) 字符集 utf8 整理 utf8_unicode_ci 非空, `category3` varchar(500) 字符集 utf8 整理 utf8_unicode_ci 非空, `web_link` varchar(3000) 字符集 utf8 整理 utf8_unicode_ci 非空, `gallery_thumb` varchar(2000) 字符集 utf8 整理 utf8_unicode_ci 非空, `reg_time` 时间戳 NOT NULL DEFAULT CURRENT_TIMESTAMP, 主键(`ID`) )
如果我得到我想要工作的功能,category2 和 category3 将是不必要的并被删除。
标签表:
创建表`gallery_tags`( `ID` int(11) NOT NULL AUTO_INCREMENT, `tag_name` varchar(100) 字符集 utf8 整理 utf8_unicode_ci 非空, 主键(`ID`) )
标签和画廊参考表:
创建表`gallery_tag_reference`( `ID` int(11) NOT NULL AUTO_INCREMENT, `gallery_id` int(11) NOT NULL, `tags_id` int(100) NOT NULL, 主键(`ID`) )
我添加了标签功能。当我现在创建一个画廊时,我可以向画廊添加任意数量的标签。现在画廊将只有一个主要类别和许多与之相关的标签。但我希望画廊也能根据我在创建画廊时添加的标签出现在其他类别中。这些类别将有一个或多个预定义的标签。我现在要做的是,当访问者单击类别时,将选择相同的数据,而在此之前只有查询过滤部分会有所不同。
例子:
类别 1 将有标签:汽车、蓝色、闪亮
画廊 1 将有标签:蓝色、红色、快速。
Gallery1 不属于 category1,但因为它在表“gallery_tags”中添加了一个标签“blue”,所以它出现在访问者单击 category1 按钮时执行的查询结果中。
示例 2:
Category1 将没有标签。
Category2 将没有标签。
Category3 将没有标签。
Category4 将具有预定义的标签:黄色、红色。
Category5 将具有预定义的标签:高、高。
Gallery1 将没有标签,但它属于 Category1。
Gallery2 将没有标签,但它属于 Category2。
Gallery3 将有标签:黄色、高大、字段
Gallery3 属于 Category3。
当访问者点击 Category4 按钮时,选择的是属于 Category4 的画廊和具有标签“黄色”或“红色”的画廊。因为这里我们没有属于 Category4 的画廊,但我们有 gallery3,它有标签黄色,并且 Category4 也有预定义的标签“黄色”,当点击时,画廊 3 会显示在 Category4 中。
类别 5 也是如此。它没有直接属于它的任何画廊,但是因为画廊 3 有一个与之相关的标签“高”,并且类别 5 也有预定义的标签“高”,所以画廊 3 也显示在类别 5 中。
我希望我清楚地描述了我想要实现的目标。由于我在 MySQL 方面不是很有经验,所以我很难将必要的查询放在一起。我希望有人会帮助!