mySQL 一个更优雅的查询,匹配一些(不是全部)条件

标签 mysql

我有一个困惑的解决方案,但认为必须有一个简单且更优雅的方法来编写此查询。

在一张表中查找匹配项。该表有 6 列。(稍后可能会更多)

如果匹配超过三列,则需要返回行。

例如列名称颜色、尺寸、形状、重量、高度、宽度

可以返回行,因为 WHERE 子句会命中颜色、高度、宽度。 或者是尺寸、形状、宽度的热门。

基本上是任意三列的任意组合。

我可以使用(尺寸,宽度,高度)或(颜色,形状,宽度)或(颜色,尺寸,宽度)看到解决方案......但这只是一种愚蠢的方式它。

一定有一个简单的方法让我无法理解。

最佳答案

如果我没猜错的话,你想要这样的东西:

select * from table where 
(col1 = x)
+
(col2 = y)
+
(col3 = z)
+
(col4 = w)
+
(col5 = v)
>= 3

col1 = x 这样的 bool 表达式返回 truefalse10 。因此,这会匹配至少 3 列匹配的任何行,无论 5 列中的哪一列。

但是,顺便说一句,在不同的列中拥有属性是数据库设计不太好的标志。如果您需要为一件商品添加一项属性该怎么办?您必须更改整个表。所有其他项目在该列中都会有 null,浪费空间。如果某项在列中具有 null,那么它是否真的没有该属性,或者只是未设置?

考虑将属性放在行而不是列中,并阅读有关规范化的内容。

关于mySQL 一个更优雅的查询,匹配一些(不是全部)条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313947/

相关文章:

php - PDO 数据库连接失败

php - 如何修复 : no query results for model [App\User] error

mysql - 从mysql检索图片到VB,NET

php - 在sql中存储session (session_set_save_handler())

javascript - PHP 和 MySQL 中的动态下拉列表

php - 如何在两个表中随机排列帖子?

php - 如何获取 PDO 错误中的列名?

mysql - 适用于大规模数据集的 SQL

mysql - CLR 汇编 C# DBMS

mysql - mysql的dayofweek内存昂贵吗...或者我不应该关心?