Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wartość dynamiczna MySQL jako alias

Dlaczego używasz sprzężenia lewego zamiast sprzężenia wewnętrznego? Również, jeśli robisz zapytania dynamiczne. Powinieneś rozważyć użycie Procedur składowanych. Możesz zamontować instrukcję SQL w zmiennej, a następnie wykonać. Oto krótki przykład:

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.:Uważaj na nazwy, których używasz jako aliasów. Mogą być zarezerwowaną składnią SQL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak skonfigurować encję (doktrynę) dla widoku bazy danych w Symfony 2?

  2. Czy replikacja mySQL zapewnia natychmiastową spójność danych?

  3. Jak skonfigurować poprawną strefę czasową w JDBC?

  4. Elokwentny groupBy make SQLSTATE[42000] z poprawnym zapytaniem SQL w Laravel 5.3

  5. Mytop – przydatne narzędzie do monitorowania wydajności MySQL/MariaDB w systemie Linux