为正确的结果构建mysql查询:查找字符串prepend由一些破折号

时间:2015-08-24 08:11:29

标签: php mysql regex

我有记录item_name。每个item_name的长名称分为11个破折号( - )。我使用10选择表格来过滤搜索表单中的数据。如果列为空,我通过了选择表单。用户可以在其中选择多个选项。当用户在第9个选择表单中选择“S”和“I”时,我遇到了问题。因为它会与在其他部分用s结束的其他记录混淆。

我试图像这样查询:

select item_name from table_name where (item_name like '%S-%')

=====数据样本=====

  1. Suspeno-Fazalqe-ST-Jig-Baroque-Chop Plate 12“ - 2118 Bloom-Gloss-Royal Of London-I-2118 Bloom
  2. Fazalqe-ST-Jig-Baroque-Cup - Maroon-#Gloss-Royal Of London-S-2118 Bloom
  3. Fazalqe-ST-Jig-Baroque-Saucer 6.5 - Maroon-#Gloss-Royal Of London-S-2118 Bloom
  4. Suspeno-Fazal BS-ST-Jig-Baroque-Soup Plate - 2118 Bloom-Gloss-Royal Of London-I-2118 Bloom
  5. Suspeno-Fazal-ST-Jig-Baroque-Salad Plate 7.25--2118 Bloom-Gloss-Royal Of London-S-2118 Bloom
  6. Fazalqe-ST-Cas-Baroque-Creamer - 棕色兰花 - #Gloss-Royal Of London-I-2139 Bloom Brown
  7. Fazalqe-ST-Cas-Baroque-Sugar Lid ---#Gloss - I-2139 Bloom Brown
  8. Fazalqe-ST-Cas-Baroque-Sugar - 棕色兰花 - #Gloss-Royal Of London-I-2139 Bloom Brown
  9. Fazalqe-ST-Cas-Baroque-Teapot - 棕色兰花 - #Gloss-Royal Of London-I-2139 Bloom Brown
  10. 我想也许我需要正则表达式,但我没有足够的技巧。我只是想我是否可以使用这样的通配符进行查询

    select item_name from table_name where item_name like "*-*-*-*-*-*-*-*-(S-)*"
    

    正确的结果应该是第2,3和5行。 有人可以帮我实现这一点。谢谢你。

2 个答案:

答案 0 :(得分:1)

如果您想改善上面的通配符查询,

"*-*-*-*-*-*-*-*-(S-)*"

也许你可以尝试写这个:

'.*\-.*\-.*\-.*\-.*\-.*\-.*\-.*\-.*\-S\-.*'

答案 1 :(得分:0)

试试这个, 从table_name中选择item_name(item_name喜欢'% - S - %')