1. 前言

最近升级博客,给文章页面底部增加了两个按钮,可以直接跳转到上一篇和下一篇。

如下图所示:

实现这个功能的难点在于:数据库怎么选取出一条记录的前后两条相邻的记录?

2. 数据库设计

关于我文章数据库的设计如下图所示:

可以看到,每条记录的身份是索引Id。因为之前有很多文章记录被删除了,所以,Id并不是连续的。

如果当前文章的索引值是33,那么可以通过以下命令来得到前后相邻的 2 篇文章:

select * from passage where id in(selectcasewhen SIGN(id - 32 )>0 THEN MIN(id)when SIGN(id - 32 )<0 THEN MAX(id)endfrom passagewhere id != 34GROUP BY SIGN(id- 32 )ORDER BY SIGN(id- 32 ))ORDER BY id;

在执行上面命令时,Mysql给了我个: SELECT list is not in GROUP BY clause ... 的报错。经过 Google 得知,mysql 5.7以上,默认启动了only_full_group_by,MySQL 就会拒绝选择列表、条件或顺序列表引用的查询。

以下是原文:

Reject queries for which the select list, HAVING condition, or ORDER BY list refer to nonaggregated columns that are neither named in the GROUP BY clause nor are functionally dependent on (uniquely determined by) GROUP BY columns. As of MySQL 5.7.5, the default SQL mode includes ONLY_FULL_GROUP_BY. (Before 5.7.5, MySQL does not detect functional dependency and ONLY_FULL_GROUP_BY is not enabled by default. For a description of pre-5.7.5 behavior, see the MySQL 5.6 Reference Manual.)

所以,我们应该设置sql_mode中不包含only_full_group_by选项。MySQL 5.7.5后only_full_group_by成为sql_mode的默认选项之一,这可能导致一些sql语句失效。

进入 mysql 配置文件,在[mysqld]部分中添加以下配置,并且重启 mysql 即可。

[mysqld]# ... other configsql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATEERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION # delete 'only_full_group_by'# ... other config

4. 相关链接

only_full_group_by

总结

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. Linux下MYSQL 5.7 找回root密码的问题(亲测可用)
  3. MySQL 什么时候使用INNER JOIN 或 LEFT JOIN
  4. android中HttpURLConnection调用getResponseCode()时崩溃 解决方
  5. android从服务器下载文件(php+apache+win7+MySql)
  6. Android空引用问题的解决方法——on a null object reference
  7. android读取assets大于1M文件的解决方法
  8. 几个Android小错误解决方法
  9. CheckBox android:paddingLeft 不兼容问题解决方法

随机推荐

  1. Android Studio 环境问题
  2. Android 开发系列 2 Activity
  3. 为Android软件创建快捷方式
  4. Android中OnScrollListener的详解(Listvie
  5. 升级android studio至3.3.2出现WARNING:
  6. Android(安卓)颜色大全 colors.xml
  7. MTK Android Driver :sensor
  8. android 全面讲解BroadCastReceiver
  9. 选项卡片段
  10. Android P 系统应用无法对外置SD卡进行读