mysql select 查询不适用于通过用户变量设置的限制和偏移量

标签 mysql sql select stored-procedures user-variables

我会简短地说:

工作

SELECT p.id,
    p.name,
    cat.name `category`,
    prod.name `producer`,
    p.images,
    p.price,
    p.flag_avaliable,
    p.amount,
    p.description,
    p.options
FROM product p
    INNER JOIN product_category cat ON cat.id = p.category_id
    INNER JOIN product_producer prod ON prod.id = p.producer_id
ORDER BY @asc_or_desc
    limit 5 offset 6;

不工作

set @asc_or_desc = 'id desc ';
set @limit_number = 5;
set @offset_number = 6;
SELECT p.id,
   p.name,
   cat.name  `category`,
   prod.name `producer`,
   p.images,
   p.price,
   p.flag_avaliable,
   p.amount,
   p.description,
   p.options
FROM product p
         INNER JOIN product_category cat ON cat.id = p.category_id
         INNER JOIN product_producer prod ON prod.id = p.producer_id
ORDER BY @asc_or_desc
limit @limit_number offset @offset_number;

所以,我需要“不工作”版本才能工作。我怎样才能做到这一点?

我有同样的错误:'您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 '@limit_number offset @offset_number; 附近使用的正确语法。结束''

为什么?类型没问题,你看...有什么问题吗?也许值被一些错误替换了?

我正在使用 JetBrains DataGrip、MySQL 8.0.15。

最佳答案

使用准备好的语句已经解决了这个问题。 代码:

set @statement =
    concat('SELECT p.id,
       p.name,
       cat.name  `category`,
       prod.name `producer`,
       p.images,
       p.price,
       p.flag_avaliable,
       p.amount,
       p.description,
       p.options
FROM product p
         INNER JOIN product_category cat ON cat.id = ?
         INNER JOIN product_producer prod ON prod.id = p.producer_id
ORDER BY id ',@asc_or_desc,'
limit ? offset ?');
prepare prepared from @statement;
EXECUTE prepared USING @category_id, @limit_number, @offset_number;
DEALLOCATE PREPARE prepared;

关于mysql select 查询不适用于通过用户变量设置的限制和偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55985767/

相关文章:

MySQL C 连接器/mysql_autocommit 函数

mysql - 如何统计 OAuth2 验证的 API 调用

按销售代表进行 SQL 分组 - 选择 2 个计数

php - 将 WHERE 和 GROUP BY 合并到日期时间总和 MySQL 查询中

MySQL 按行数排序

javascript - 从值数组中设置 Angular 中选定的选项

php - Mysql php更新功能问题

php - PHP 表中的换行符

sql - Rails 中相乘的列的总和

php - 我无法使用我的密码和电子邮件访问我的管理面板。这是 PHP 和 SQL 相关的