1. 程式人生 > 其它 >MySql 拼接查詢 CONCAT

MySql 拼接查詢 CONCAT

技術標籤:PHPTP6mysql

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時會返回查詢結果