我如何设计查询以从数据库中正确选择

时间:2019-07-29 08:11:47

标签: php sql

我尝试选择的方式: SELECT * FROM products_translate WHERE (category IN(10)) AND .....

数据库中字段的内容: 类别-7、10

此结构化查询仅显示仅按类别10进行分类的产品,而不显示包含其他类别的产品。 例如7、10

如何正确构建查询?

数据库结构:

TABLE `products_translate` (
  `id` int(11) NOT NULL,
  `uniqueID` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `category` varchar(255) NOT NULL
)

因此,类别字段可能包含: (1, 3, 7, 10)

数据库中的一条记录 (109, 109, 'title', '7, 10')

我的目的是选择7、10个数据库请求,以输出它们在7类或10类字段中包含的所有条目。

3 个答案:

答案 0 :(得分:0)

如果您的数据库是mysql,则可以使用FIND_IN_SET()

 SELECT * FROM products_translate WHERE FIND_IN_SET('7, 10',category)> 0

答案 1 :(得分:0)

要查询等于7或10的类别,只需在查询中添加7。

SELECT * FROM products_translate WHERE category IN (10, 7)

答案 2 :(得分:0)

如果您执行SELECT * FROM products_translate WHERE (category IN(10)) AND .....,则只会返回带有category = 10的行。

所以您可以:

  • SELECT * FROM products_translate WHERE (category < 10) AND ...:如果您想要类别1、2、3 ... 10
  • SELECT * FROM products_translate WHERE (category IN(7, 10)) AND ...:如果只需要类别7和10
  • SELECT * FROM products_translate WHERE ... GROUP BY category:返回所有元素(根据您的WHERE条件),但按category分组(每个元素一个)
  • SELECT * FROM products_translate WHERE ... ORDER BY category:这样,您将按category的返回元素顺序

是您要找的东西吗?

编辑:添加了有关表结构的一些信息之后

SELECT * FROM products_translate WHERE (category LIKE '%10%') AND ...:这将选择类别字段中存在“ 10”的行。但是请注意,它也可以与105810之类的类别一起使用

您的类别字段不是一个好主意:使用VARCHAR将多个类别放在一个字段中不是很有效...它应该是INTEGER,因此对于类别7和10的元素,表中应该有2个元素而不是一个。为此,在uniqueID + categoryID上添加UNIQUE INDEX,以避免重复。