如果要对LimeSurvey的问题进行排序,最简单的方法就是在问题列表中通过拖拽的方式,你可以在问卷结构中直接调整也可以通过设置->记录问题/问题组来调整,如下图:
limesurvey-questions-order.png
但是这都是针对问卷问题来排序的,那么子问题呢?如果子问题比较少,也可以考虑采用拖拽的方式。如果问题多大上百条甚至更多,这个方法就显得效率低下很多,比如前两天做的MMPI问卷,子问题多达566条(参见本站《limesurvey子问题太多无法保存》一文),又因为系统的问题导致有部分问题顺序打乱,排在三百或四百多的问题插到了前十条中,如果用拖动的方式光一条可能就要花费很长时间。

解决方案

一种是通过快速添加的方式重新覆盖原来的子问题,这种做法对于子问题数量不多并且是局部调整了顺序的比较有用,而对于像MMPI这种五百多条的来说,作用有限,因为本身就是由于数据量导致的存储出错,再怎么覆盖也是没用的。
另一种就是直接通过修改数据库,因为所有的问题都是存储在数据表前缀_questions数据表中,我们先来看看大致的结构:
limesurvey-questions-table.png
其中parent_id指的是子问题所对应问题的ID(也就是表中的qid,问题和子问题的区别就在于,前者的parent_id为0,后者为对应的问题ID);title指的是子问题的编号,通常我们都是以SQ打头;而question_order则是问题排列的序号(在上图中正常顺序应该与title字段中后面的数字相同,也就是第几题排在第几位)。
如果顺序错误的话,你就会发现title和question_order的数字不是一一对应的,所以我们要做的就是将title列中的字段截取后填入到question_order中,并且加入条件parent_id等于同一个父问题编号。像上图的例子中,我们可以采用以下的SQL语句:

update lime_questions set question_order=right(title,3) where parent_qid='3021';

执行后,排序终于都改过来了。不过看了一下影响的数据,发现存储时还是漏了将近二十几条,没办法只能手动再补进去。
至此,所有问题全部解决,问卷部分创建完成。

总结

以上方法同样适用于问题的排序。不过要啰嗦两句的是,我们在创建问题或是子问题时,一定要记得不要随便给问题编号,相同问题组的尽量采用同样的问题前缀,数字尽可能保持连续,这样的话一旦顺序乱了之后就能很快调整过来(在LimeSurvey3.x的早期版本中,拖动问题排序很容易造成整体错乱)。

最后修改:2020 年 07 月 07 日
如果觉得我的文章对你有用,请随意赞赏