我正在尝试从数据库中选择总数和有限数量的产品。
示例:
$result = $database->query("SELECT* FROM products WHERE type = $category limit $start,$per_page");
$all_data = $database->query("SELECT* FROM products WHERE type = $category");
然而,当我运行这个时,我收到了mysql错误。 是否有可能在不使用多个查询的情况下获取所需数据。
这是我得到的mysql错误;
数据库失败...您的SQL语法出错了;检查与MySQL服务器版本对应的手册,以便在第1行的“-2,2”附近使用正确的语法
答案 0 :(得分:0)
如果我理解正确,您将在第二个查询中获取您的类别中的整个产品集,但在第一个查询中仅获取一个页面的价值(例如,项目10到19)。我只是用第二个查询获取所有项目,然后将行加载到PHP数组中并使用array_slice()
来获取当前页面所需的数组段。
SELECT
和*
之间的空间不足,但你也可以做你想做的事情而不需要点击数据库两次。
答案 1 :(得分:0)
如果您只需要计数,请使用:
SELECT count(*)
FROM products
WHERE type = '$category' limit $start,$per_page");
SELECT count(*)
FROM products
WHERE type = '$category';
答案 2 :(得分:0)
错误是由于在limit子句中使用负数。来自MySQL documentation on Select syntax的代码段:
LIMIT子句可用于约束返回的行数 通过SELECT语句。 LIMIT需要一个或两个数字参数, 必须都是非负整数常量(使用时除外) 准备好的陈述)。
因此,如果您真的需要负面限制,那么该错误的解决方案就是使用预备语句,正如@James在您对您的问题的评论中所提出的那样。
请注意,select*
不会产生任何错误,但肯定会造成混淆!
答案 3 :(得分:0)
您创建一个过程然后调用此过程。我希望它适合你。
CREATE PROCEDURE `test_proc`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
declare name1 TEXT;
declare id1 TEXT;
select name,id into name1,id1 from my_tbl WHERE name='sam';
select * from my_tbl;
select name1,id1;
END
您可以调用此单一调用存储过程。