我设置了一个MySQL表,其中包含一个名为clicks的字段。它包含按空格分隔的某些横幅的点击次数(例如" 9 80 47 306")。字段的类型是文本。 我希望得到整个表行并按该字段中的最后一个值进行排序(在这种情况下它将是306)。
到目前为止,我所做的事情显然不起作用:
SELECT * FROM banners WHERE active = "1" ORDER BY clicked DESC
有没有办法只使用SQL来实现这个目标?
提前致谢!
答案 0 :(得分:4)
将substring_index()
与-1:
SELECT *
FROM banners
WHERE active = "1"
ORDER BY substring_index(clicked, ' ', -1) DESC;
我应该补充一点,我同意这是一种存储数据的坏方法。你应该有一个联结/关联表。每个横幅都有一行,点击列。
编辑:
正如Joachim的评论明智地指出的那样,我们可能希望将其更改为用于排序的数字。在MySQL中,我更喜欢+ 0
,因为它不报告错误:
SELECT *
FROM banners
WHERE active = "1"
ORDER BY substring_index(clicked, ' ', -1) + 0 DESC;
Ugg,将数字存储为字符串。
答案 1 :(得分:1)
尝试以下方法: 按substr排序(点击,长度(点击-3),3)