【问题标题】:build mysql query for the right result: find string prepend by some dash为正确的结果构建 mysql 查询:查找字符串前面的一些破折号
【发布时间】:2015-08-24 08:11:28
【问题描述】:

我有记录 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--栗色-#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--Brown Orchid-#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--Brown Orchid-#Gloss-Royal Of London-I-2139 Bloom Brown

我想也许我需要正则表达式,但我没有足够的技能。我只是想我是否可以使用这样的通配符进行查询

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

正确的结果应该是行号 2,3 和 5。 有人可以帮助我意识到这一点。谢谢你。

【问题讨论】:

  • 你需要一个正则表达式。有很多教程可以帮助您学习。这是一项很有用的技能。

标签: php mysql regex


【解决方案1】:

如果你想改进上面的通配符查询,

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

也许你可以试试这样写:

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

【讨论】:

    【解决方案2】:

    试试这个, select item_name from table_name where (item_name like '%-S-%')

    【讨论】:

    • 我不能在 S 之前使用 -(破折号),因为 S 来自变量 post 的选项值。
    • thxharsh1802,但我不能简单地在 S 之前使用 - (破折号),因为 S 来自变量 post 的选项值。我已经使用 php 创建了查询字符串生成器,以适应 POST 发送的多个选项。喜欢:AND (item_name LIKE '%S-%' OR item_name LIKE '%I-%')
    • 对不起,我没明白你的意思。你仍然可以使用 Like: item_name LIKE '%S-%' OR item_name LIKE '%I-%'。您还想要在 S..Like 之前包含一些字符的记录:XYZS-%?
    • 正如我一开始提到的,我有 11 个选择输入表单,即多项选择。在从 1 到 9 的选择表单上也有可以插入到查询中的选项值。因此,查询“S”必须出现在 9 破折号之前。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    相关资源
    最近更新 更多