【问题标题】:Can I select the shortest field name with GROUP BY (MySql)我可以用 GROUP BY (MySql) 选择最短的字段名吗
【发布时间】:2014-03-10 18:39:50
【问题描述】:

假设我有 2 个产品名称:死空间和死空间限量版,我想按“产品名称”对它们进行分组,以便在 mysql 查询中选择“死空间”。因此,如果 where caluse 是“product_name LIKE '%dead space%'”,我希望查询选择具有最短字符串的“product_name”。

非常感谢,

【问题讨论】:

  • 而不是like 使用=
  • 是的,这可能适用于“死区”,但我会搜索“死区”或只有“空间”的游戏。谢谢,
  • @Krishna - 什么?他特别不想要完全匹配,所以= 是行不通的。 Pabola - 如果您要输入 "dead" 之类的内容,您是否希望在搜索中包含 "Left 4 Dead"?如果您尝试按系列/版本分组,则需要不同的设置查询。
  • 当然,我有链接的关键字:比如“真理之杖”,我的查询搜索使用此关键字的游戏,我可以创建一个链接(到具有此关键字的搜索页面)和链接的标题将是最短的产品名称(如果有限量版,我不想有 2 个链接)。如果我在 product_name 中更改/添加某些内容(例如“:”或“-”),我想自动更改链接的标题。

标签: php mysql sql group-by where


【解决方案1】:

你可以试试LENGTH()

 select product_name ,length(product_name) as the_length from your_table 
 where product_name LIKE '%dead space%'
 ORDER BY  length(product_name)
 limit 1

DEMO HERE

【讨论】:

  • 他可能只想要一张唱片,但这看起来最接近。
  • @GordonLinoff 做你认为好的 gordon :) ,这都是你的 :) 。我只是没有看到他想要一个结果。无论如何感谢 up+ 。还编辑了演示
【解决方案2】:

请试试这个查询

 select * from table where product_name LIKE '%dead space%'
 HAVING length(product_name ) = min(length(product_name ))

【讨论】:

  • 如果这行得通,那是巧合。 having 子句为length(product_name) 选择任意行。它肯定不会在所有情况下都有效。
  • @GordonLinoff 我用数据库中的两行检查了它,标题长一短。它选择了较短的。
  • 。 .将它们按不同的顺序排列。此外,您可以在 SQL Fiddle 上尝试这些事情。
猜你喜欢
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
相关资源
最近更新 更多