无法在mysqli中选择包含多个值的行
我在单个单元格的无法在mysqli中选择包含多个值的行,mysql,sql,database,stored-procedures,mysqli,Mysql,Sql,Database,Stored Procedures,Mysqli,我在单个单元格的hashTags列中有多个值,如11,12,13,14 CREATE TABLE `product` ( `productId` int(10) unsigned NOT NULL auto_increment, `productName` varchar(100) NOT NULL default '', `hashTags` varchar(255) ....... ) 当我尝试此查询时,它只选择第一个值为true的列,并对其对应的单元格进行查询,那么我如何
hashTags
列中有多个值,如11,12,13,14
CREATE TABLE `product` (
`productId` int(10) unsigned NOT NULL auto_increment,
`productName` varchar(100) NOT NULL default '',
`hashTags` varchar(255)
.......
)
当我尝试此查询时,它只选择第一个值为true的列,并对其对应的单元格进行查询,那么我如何继续
SELECT hashTags FROM `product` WHERE hashTags in (11,14);
我想写一个查询,选择包含
14
的行作为它的标签
,首先,在一列中存储多个值是不好的!看
尝试使用like
操作符:
+------------+
| hashTags |
+------------+
| 11,14,12,13|
+------------+
| 13,14,15 |
+------------+
然而,这并不是维护数据的最佳方式,这里描述的理论太多了,但想法如下:
创建一个附加的HashTag(hashTagId,productId)
表,该表存储特定产品的标记,使用您的示例并假设您的产品具有ID 1,以下行存储的信息与列hashTags中的信息相同
SELECT hashTags
FROM `product`
WHERE hashTags like '%,14,%'
or hashTags like '%,14'
or hashTags like '14,%'
or hashTags like '14'.
现在,要查询标记为11和14的特定产品,请使用如下查询:
HashTags
--------
11 | 1
12 | 1
13 | 1
14 | 1
实际上,为了确保一个产品同时具有两个哈希标记,查询可能会更复杂,但这是一个基本想法。请参阅第一行中的链接。当我执行like查询时,它会给出包含114和144的结果。关于如何维护特定产品的多个哈希标记值,我已更改了答案。现在试试。那是无法维护的,开始正常化你的DB@EmilioGort你能帮我吗?我只需要维护一篇文章的多个散列标签
SELECT productId,
productName, ...
FROM Product,
HashTags
WHERE HashTag.productId = Product.productId
AND HashTag.hashTagId = 14
OR hashTagId = 13.