无法在mysqli中选择包含多个值的行

时间:2014-02-18 04:42:04

标签: mysql sql database stored-procedures mysqli

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

1 个答案:

答案 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.

实际上,查询可能更复杂,以确保产品具有两个哈希标记,但这是基本的想法。请参阅第一行中的链接。