• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

请问php mysql select支持explode字段然后根据值排序吗?

php 搞代码 4年前 (2022-01-23) 18次浏览 已收录 0个评论
文章目录[隐藏]

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.完全小白,描述可能不规范,但意思应该说明白了。

能实现,如果在MySQL层面实现可能会导致数据库压力比较大.
可以考虑在PHP程序这边排好序,然后再根据ID序列从MySQL取数据.

<code><?phpheader('Content-Type: text/plain; charset=utf-8');//$db = new mysqli('127.0.0.1','user','pass','dbname',3306);//$arr = $db->query('SELECT id,field FROM table')->fetch_all(MYSQLI_ASSOC);//假设取出来的数据结构如下$arr = array(    array('id' => 1, 'field' => '数据1|||||数据2|||||256'),    array('id' => 2, 'field' => '数据1|||||数据2|||||128'),    array('id' => 3, 'field' => '数据1|||||数据2|||||512'),);foreach($arr as $k => $v) {    //把field字段的内容转成一个数组比如array('数据1','数据2','256'),方便后面排序    $arr[$k]['field'] = explode('|||||', $v['field']);}//根据field字段里的第三个元素对数组进行排序uasort($arr, function($a, $b) {    if($a['field'][2]===$b['field'][2]) return 0;    //下面这句话的意思就是,如果前面的a大过后面的b,就返回1,返回1表示交换顺序,也就是小的数在前面,由小到大升序排列.    else return ($a['field'][2] > $b['field'][2]) ? 1 : -1;});foreach($arr as $k => $v) {    $ids[] = $v['id'];}$ids = implode(',', $ids); //ID序列为2,1,3//按照ID序列的顺序查询MySQL//SQL语句为 SELECT * FROM table WHERE id IN(2,1,3) ORDER BY FIELD(id,2,1,3)$sql = "SELECT * FROM table WHERE id IN($ids) ORDER BY FIELD(id,$ids)";//$ret = $db->query($sql)->fetch_all();</code>

如果数据量很大,可以考虑把PHP排好的ID序列缓存起来.
ORD

5本文来源gao!daima.com搞$代!码#网#

搞代gaodaima码

ER BY FIELD(id,$ids) 这个操作在数据量大时也会产生性能问题,
这时可以考虑根据实际情况对$ids进行切分,比如第一页0到19排序20条,第二页类推,这样小数据量的自定义排序对MySQL压力就小得多了.

这个和php没什么关系。你可以用mysql创建一个function,然后用function来排序:

<code>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, '');</code>
<code>SELECT * FROM test_table order by SPLIT_STRING(test_tablecol, '|||', 3);</code>

能实现,很麻烦,而且效率非常低,对于这种要求通常的解决办法是修改表结构。

从纯逻辑上来说,sql其实可以做很复杂的事情,但是你觉得如果一个查询需要跑好几分钟的话被家里人知道了会不会挨打?

建议查询出来之后用php排序,不要用mysql排序

mysql 的substring_index


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:请问php mysql select支持explode字段然后根据值排序吗?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址