【问题标题】:MySQL CAST as unsigned doesn't workMySQL CAST as unsigned 不起作用
【发布时间】:2018-11-18 19:22:48
【问题描述】:

我创建了以下查询:

SELECT DISTINCT
model,
substring_index(group_concat(id ORDER BY id DESC), ',', 1) AS newid, 
substring_index(group_concat(mainimage ORDER BY id DESC), ',', 1) AS newmainimage
FROM `example-table`
GROUP BY model
ORDER BY newid DESC;

问题是这个查询对变量newid 进行排序,如下所示:99、9、87、121、11,而我想查看:121、99、87、11、9。

我认为答案是在ORDER BY CAST(newid AS UNSIGNED) DESC 中更改ORDER BY newid DESC 但这根本没有给我任何结果,所以显然我错了。我在这里错过了什么?

【问题讨论】:

  • 您需要在ORDER BY inside GROUP_CONCAT 中使用CAST;您可能将 id 值存储为字符串,因此它们将始终使用字符串排序而无需此类强制转换。
  • 你能分享一下表架构吗?
  • @Uueerdo 在 GROUP_CONCAT 函数中使用它不起作用,但你在路上帮助了我。我最终在 substring_index 函数周围使用了 CAST 函数,这可以解决问题:cast(substring_index(group_concat(id ORDER BY id DESC), ',', 1) as unsigned) AS newid
  • 哦,我明白了,我有点忽略了 substring_index,因为 "99, 9 ..." 看起来像 group_concat 结果。

标签: mysql casting


【解决方案1】:

我找到了解决方案。显然我应该像这样使用 CAST 函数:

cast(substring_index(group_concat(id ORDER BY id DESC), ',', 1) as unsigned) AS newid

【讨论】:

  • ...实际上,这有点奇怪;如果可行,那么您原来的 ORDER BY CAST(newid AS UNSIGNED) DESC 应该也可以。
  • 这也是我的假设,但正如我在问题中所写的那样,我的原始代码没有将结果按正确的顺序排列。虽然我仍然没有任何解释......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
相关资源
最近更新 更多