一、為什么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’)”);
然后用
顯示圖片
使用后一種方法,我們節省了 1/3 的存儲空間。為什么在 MySQL 數據庫中將圖像存儲為?base64?更常見?
關于將圖像存儲在數據庫中的優缺點有很多爭論,大多數人認為這不是一種實用的方法。無論如何,在這里我假設我們將圖像存儲在數據庫中,并討論這樣做的優異方法。