MySql 拼接查詢 CONCAT
阿新 • • 發佈:2021-02-03
CONCAT的用法就是查詢的時候拼接多個欄位為一個欄位,比較常用的就是地址拼接,比如:
//拼接使用者地址的省市區、詳細地址、門牌號
SELECT CONCAT(province,city,district,address,house_no) AS addre FROM user_address
還有一種情況就是我們需要搜尋查詢使用者地址,但是又不想過多的使用or去查詢,這個時候子查詢+拼接就能實現我們的需求,SQL:
SELECT * FROM (SELECT CONCAT(province,city,district,address,house_no) AS addre FROM yw_user_address) AS a WHERE a.addre LIKE "%大夫%";
子查詢必須要加別名,不加別名sql會報錯。
使用拼接的方式模糊搜尋地址關聯使用者
SELECT u.*,CONCAT(a.province,a.city,a.district,a.address,a.house_no) FROM `user_address` `a` INNER JOIN `user` `u` ON `u`.`id`=`a`.`user_id` SELECT * FROM ( SELECT u.*,CONCAT(a.province,a.city,a.district,a.address,a.house_no) AS addre FROM `user_address` `a` INNER JOIN `user` `u` ON `u`.`id`=`a`.`user_id`) addre WHERE `addre`.`addre` LIKE '%搜尋地址%'
我經常用的是TP6框架,所以我這裡在加一個專案中的運用方式
//獲取子查詢sql $sql = UserAddress::field("u.*,CONCAT(a.province,a.city,a.district,a.address,a.house_no) as addre")->alias("a")->join("user u","u.id=a.user_id")->buildSql(); //查詢搜尋的結果 $sql = Db::table($sql." addre")->where("addre.addre","like","%搜尋地址%")->fetchSql(true)->select();
fetchSql方法是列印sql,true的時候會返回sql語句,false時會返回查詢結果