0

我有一个如下的数据库表。

促销_表

id(INT), promotion_name(VARCHAR),......, bungalow_ids(VARCHAR)

我们可以为平房添加促销 (23)。因此,添加了一行带有平房 ID 的行,如下所示。

1,我的升职,........,23

但是,如果我为多个平房(23,42)添加了一个促销活动,则所有 ID 都保存在下面的bungalow_ids列中。

2, 我的推广 2, ........, 23 | 42

如果用户搜索针对特定平房的促销 (23) 平房的所有促销都应显示在结果中。

我有一个如下查询。

SELECT * FROM Promotion_Table WHERE bungalow_ids = '23'

它只有 1 行。但实际上第二行也应该显示,因为有报价。我不能使用LIKE,因为它得到错误的记录。

鉴于我已经参考了下面的链接,但我不知道如何在查询中使用它们。

您可以拆分/分解 MySQL 查询中的字段吗?

等价于在 MySQL 中处理字符串的 explode()

我怎样才能解决这个问题?如何分解列数据并在查询中使用它?

4

3 回答 3

0

您需要重新格式化您的数据库架构。您需要构建 2 张桌子,一张用于促销,一张用于平房。如下所示:

促销:Promotion_id(int),Promotion_desc

简易别墅: Bangalow_id(int),Promotion_id(int)

表格示例:

晋升 :

1 我的促销     
2秒促销        

简易别墅:

1 1    
2 2   
3 1   
4 1   

创建以上两个表后,以下查询将起作用并返回 1、3、4:

SELECT Bangalow_id FROM Promotion_Table WHERE bungalow_id = '1'
于 2013-05-21T09:37:28.470 回答
0

上一个答案是正确的决定,但如果您坚持使用您的模型。您可能想要做的是:

SELECT *
  FROM Promotion_Table
 WHERE bungalow_ids = '23'
    OR bungalow_ids LIKE '23,*'
    OR bungalow_ids LIKE '*,23'
    OR bungalow_ids LIKE '*,23,*'

这假设数字用“,”分隔。但这是错误的方法,请按照上一个答案中的说明对数据库进行更改。

于 2013-05-21T09:43:11.333 回答
0

用于,分隔字符串并尝试此查询

select * from promotion_table where FIND_IN_SET("23",bungalow_ids)

http://sqlfiddle.com/#!2/7bbcb/1

于 2013-05-21T09:43:19.323 回答