1.例如表里某字段格式如下:数据1|||||数据2|||||数据3
2.现在想要把数据分割成$data[0],$data[1],$data[3],然后order by $data[3]
3.请问能实现吗?
4.完全小白,描述可能不规范,但意思应该说明白了。
1.例如表里某字段格式如下:数据1|||||数据2|||||数据3
2.现在想要把数据分割成$data[0],$data[1],$data[3],然后order by $data[3]
3.请问能实现吗?
4.完全小白,描述可能不规范,但意思应该说明白了。
这个和php没什么关系。你可以用mysql创建一个function,然后用function来排序:
CREATE FUNCTION SPLIT_STRING(str VARCHAR(255), delim VARCHAR(12), pos INT)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, pos),
LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1),
delim, '');
SELECT * FROM test_table order by SPLIT_STRING(test_tablecol, '|||', 3);
能实现,很麻烦,而且效率非常低,对于这种要求通常的解决办法是修改表结构。
从纯逻辑上来说,sql其实可以做很复杂的事情,但是你觉得如果一个查询需要跑好几分钟的话被家里人知道了会不会挨打?
5 回答3.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
能实现,如果在MySQL层面实现可能会导致数据库压力比较大.
可以考虑在PHP程序这边排好序,然后再根据ID序列从MySQL取数据.
如果数据量很大,可以考虑把PHP排好的ID序列缓存起来.
ORDER BY FIELD(id,$ids) 这个操作在数据量大时也会产生性能问题,
这时可以考虑根据实际情况对$ids进行切分,比如第一页0到19排序20条,第二页类推,这样小数据量的自定义排序对MySQL压力就小得多了.