Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Giá trị dyanmic Mysql làm bí danh

Tại sao bạn lại sử dụng kết nối trái thay vì tham gia bên trong? Ngoài ra, nếu bạn đang thực hiện các truy vấn động. Bạn nên xem xét sử dụng Thủ tục được lưu trữ. Bạn có thể gắn câu lệnh SQL trong một biến và sau đó thực thi. Đây là một ví dụ nhanh:

CREATE DEFINER=`YourDBUSER`@`localhost` PROCEDURE `rtYourProcedureName`(IN variable1 int,variable2d varchar(100), sortBy varchar(50), startRow int, ThisSQL varchar(5000), OUT totalRows int)
BEGIN
###start: MySQL is dumb and do not allow default parameter values, set here:
SET @variable1 = IFNULL(variable1 ,'0');
SET @variable2 = IFNULL(variable2 ,'');
SET @sortBy = IFNULL(sortBy ,'');
SET @startRow = IFNULL(startRow ,1);
###end: MySQL is dumb and do not allow default parameter values

set @htwsql = ThisSQL;

set @htwsql = ' SELECT SQL_CALC_FOUND_ROWS STRAIGHT_JOIN t1.field1 ,t2.field2 ';

if @variable1 = 0 then
	set @htwsql := concat(@htwsql, ' from table1 t1');
else 
	set @htwsql := concat(@htwsql,' from table2 t2 w INNER JOIN table1 t1 ');
end if;

set @htwsql := concat(@htwsql, ' where 1 = 1 ');


### sort order
if rtrim(ltrim(@sortBy)) <> '' then
	set @htwsql := concat(@htwsql,char(13), ' ORDER BY ' , cast(@sortBy as char(50)));
end if;

### limit records for pagination
set @htwsql := concat(@htwsql,char(13), ' LIMIT ', StartRow-1 ,',',24);

### just to debug the generated SQL
insert into rtlogtmp (log) select concat ('rtYourProcedureName SQL = ',@htwsql);


PREPARE stmt1 FROM @htwsql; 

EXECUTE stmt1; 

DEALLOCATE PREPARE stmt1;

SELECT FOUND_ROWS() into totalRows;

END

p.s:Hãy cẩn thận với những tên bạn sử dụng làm bí danh. Chúng có thể là cú pháp SQL dành riêng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách in Datagridview có bảng trong VB

  2. Chọn các cột trên các cơ sở dữ liệu khác nhau

  3. Không thể kết nối mysql với dự án khởi động mùa xuân

  4. Có đúng là số cột không ảnh hưởng đến hiệu suất cơ sở dữ liệu nhưng số hàng thì có?

  5. MYSQL - Chọn dữ liệu từ hàng thứ hai trong một bảng lớn