mysql怎么同时输入多个值_mysql – 一个字段搜索多个值

只是“有效”的简单解决方案可能是:

SELECT *

FROM products

JOIN colors ON colors.id = products.color_id

WHERE

( title = "red" AND color = "dress" ) OR

( color = "red" AND title = "dress" )

如果优化器足够愚蠢,不能自行注意,这种情况可能会更好:

WHERE

( title = "red" OR title = "dress") AND

( color = "red" OR color = "dress")

如果您为问题添加了更多属性(除了“标题”和“颜色”),如果存储不是问题,您可能希望将所有文本属性合并(和复制)到单个VARCHAR列中,并运行全文搜索此列.

CREATE TABLE products_properties (

product_id INT NOT NULL PRIMARY KEY,

properties VARCHAR (255),

FOREIGN KEY fk_product (product_id) REFERENCES products(id),

FULLTEXT ftx_properties (properties)

);

搜索变得非常简单:

SELECT products.*, colors.*

FROM products

JOIN colors ON colors.id = products.color_id

JOIN products_properties AS pp ON pp.product_id = products.id

WHERE MATCH(properties) AGAINST ("+red +dress")

在这个特定的例子中,这显然没有任何意义,但是属性越多,它就越能加速查询.这种非规范化也是以维护products_properties表的复杂性增加为代价的.

如果你现在问题变得非常毛茸茸

>必须处理较少的标准化输入,如“红蓝”

>拥有属于这两个类别的单词(例如,如果“红色”也是有效的布料标题)并且仍然想要区分它们(例如,像“红色蓝色”这样的查询返回一个名为“红色”的布料,颜色为“蓝色” )

但看起来这超出了你的问题的范围.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值