Я пытаюсь запустить запрос в PHP с помощью PDO. Запрос имеет некоторые переменные в верхней части, чтобы определить ранг, за исключением того, что при использовании SET @var в $ sql он возвращает пустой набор строк. Однако, если я удаляю оскорбительный SQL, он возвращает штраф.
Я не хочу возвращать @prev_value, @rank_count или @rank_increasing в моем скрипте, только ранг, который он создает в SELECT.
Можете ли вы сообщить мне, что я делаю неправильно, пожалуйста?
благодаря
$sql = " SET @prev_value = NULL; SET @rank_count = 0; SET @rank_increasing = 0; SELECT a.* , @rank_increasing := @rank_increasing + 1 AS row_num , CASE WHEN @prev_value = score THEN @rank_count WHEN @prev_value := score THEN @rank_count := @rank_increasing END AS rank FROM ( -- INLINE VIEW -- ) a "; try { $sth = $dbh->prepare($sql); $sth->execute(array($var1, $var2)); return $sth->fetchAll(PDO::FETCH_ASSOC); } catch (Exception $e) { return $e; }
Здесь найдено решение: https://stackoverflow.com/a/4685040/1266457
Спасибо 🙂
Исправить:
// Prepare and execute the variables first $sql = " SET @prev_value = NULL; SET @rank_count = 0; SET @rank_increasing = 0; "; $sth = $dbh->prepare($sql); $sth->execute(); // Run the main query $sql = " SELECT a.* , @rank_increasing := @rank_increasing + 1 AS row_num , CASE WHEN @prev_value = score THEN @rank_count WHEN @prev_value := score THEN @rank_count := @rank_increasing END AS rank FROM ( -- INLINE VIEW -- ) a "; ...