CREATE TABLE `product` (
`productId` int(10) unsigned NOT NULL auto_increment,
`productName` varchar(100) NOT NULL default '',
`hashTags` varchar(255)
.......
)
我在单个单元格中的hashTags
列中有多个值,如11,12,13,14
SELECT hashTags FROM `product` WHERE hashTags in (11,14);
当我尝试这个查询时,它只选择第一个值为true的列,并查询其相应的单元格,以便我如何继续?
+------------+
| hashTags |
+------------+
| 11,14,12,13|
+------------+
| 13,14,15 |
+------------+
我想编写一个查询,选择包含14
<{1}}的行作为其hashTag
答案 0 :(得分:1)
首先,在列中存储多个值是不好的!请参阅database normalization。
尝试使用like
运算符:
SELECT hashTags
FROM `product`
WHERE hashTags like '%,14,%'
or hashTags like '%,14'
or hashTags like '14,%'
or hashTags like '14'.
然而,这不是维护数据的最佳方式,这里描述的理论太多,但理念如下:
使用您的示例创建一个存储特定产品标记的附加HashTag(hashTagId, productId)
表,并假设您的产品ID为1,以下行存储您在列hashTags中的相同信息。
HashTags
--------
11 | 1
12 | 1
13 | 1
14 | 1
现在,要使用标记11和14查询特定产品,请使用以下查询:
SELECT productId,
productName, ...
FROM Product,
HashTags
WHERE HashTag.productId = Product.productId
AND HashTag.hashTagId = 14
OR hashTagId = 13.
实际上,查询可能更复杂,以确保产品具有两个哈希标记,但这是基本的想法。请参阅第一行中的链接。