CREATE TABLE `product` (
`productId` int(10) unsigned NOT NULL auto_increment,
`productName` varchar(100) NOT NULL default '',
`hashTags` varchar(255)
.......
)
我在像11,12,13,14这样的单个单元格的
hashTags
列中有多个值SELECT hashTags FROM `product` WHERE hashTags in (11,14);
当我尝试此查询时,它只选择查询对应的单元格的第一个值为真的列,那么我该如何进行?
+------------+
| hashTags |
+------------+
| 11,14,12,13|
+------------+
| 13,14,15 |
+------------+
我想编写查询,选择包含
14
作为其hashTag
的行 最佳答案
首先,在一个列中存储多个值是很糟糕的!请参见database normalization。
尝试使用like
运算符:
SELECT hashTags
FROM `product`
WHERE hashTags like '%,14,%'
or hashTags like '%,14'
or hashTags like '14,%'
or hashTags like '14'.
但是,这并不是维护数据的最佳方法,在这里无法描述太多的理论,但是其思路如下:
使用您的示例并假设您的产品具有ID 1,创建一个附加的
HashTag(hashTagId, productId)
表来存储特定产品的标签,假设您的产品的ID为1,则以下各行将存储您在列hashTag中具有的相同信息。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.
实际上,为了确保产品同时具有两个哈希标签,查询可能会更加复杂,但这是基本思想。请参阅第一行中的链接。
关于mysql - 无法在mysqli中选择包含多个值的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21844549/