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/

10-11 12:59