SQL语句的语法顺序: FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> UNION -> ORDER BY。因此一般不能在having condition中使用select list中的alias。但是mysql对此作了扩展。在mysql 5.7.5之前的版本,ONLY_FULL_GROUP_BY sql mode默认不开启。在5.7.5或之后的版本默认开启。
一、为什么mysql having的条件表达式可以直接使用select后的别名
SQL语句的语法顺序:
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> UNION -> ORDER BY
因此一般不能在having condition中使用select list中的alias。但是mysql对此作了扩展。
在mysql 5.7.5之前的版本,ONLY_FULL_GROUP_BY sql mode默认不开启。在5.7.5或之后的版本默认开启。
如果ONLY_FULL_GROUP_BY sql mode不开启,那么mysql对标准SQL的扩展可以生效:
1、允许在select list、having condition和order by list中使用没有出现在group by list中的字段。
此时mysql会随机选择没有出现在group by list中的字段的值。效果和使用ANY_VALUE()是相同的。
2、允许在having condition中使用select list中的alias
延伸阅读:
二、在数据库中存储图像的常用方法
在数据库中存储图像的常用方法是在存储数据之前将图像转换为base64数据。这个过程将增加 33% 的大小。或者,可以将图像直接存储为 BLOB;例如:
$image = new Imagick(“image.jpg”);
$data = $image->getImageBlob();
$data = $mysqli->real_escape_string($data);
$mysqli->query(“INSERT INTO images (data) VALUES (‘$data’)”);
然后用
显示图片
<img src=”data:image/jpeg;base64,’ . base64_encode($data) . ‘” />
使用后一种方法,我们节省了 1/3 的存储空间。为什么在 MySQL 数据库中将图像存储为 base64 更常见?
关于将图像存储在数据库中的优缺点有很多争论,大多数人认为这不是一种实用的方法。无论如何,在这里我假设我们将图像存储在数据库中,并讨论这样做的优异方法。