0

我正在尝试从数据库中选择总数和有限数量的产品。

例子:

$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”附近使用正确的语法

4

4 回答 4

0

如果我对您的理解正确,您将在第二个查询中获取您类别中的整套产品,但在第一个查询中仅获取一个页面的价值(例如,项目 10 到 19)。我将使用第二个查询获取所有项目,然后将行加载到 PHP 数组中并用于array_slice()获取当前页面所需的数组段。

编辑:正如其他人所说,实际的 MySQL 错误可能是SELECTand之间缺少空格*,但您也可以在不访问数据库两次的情况下做您想做的事情。

于 2013-08-12T02:33:42.160 回答
0

如果您只需要计数,请使用:

SELECT count(*)
FROM products
WHERE type = '$category' limit $start,$per_page");

SELECT count(*)
FROM products
WHERE type = '$category';
于 2013-08-12T02:33:57.223 回答
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

您可以调用此单个调用存储过程。

于 2013-08-12T11:40:16.207 回答
0

该错误是由于在限制子句中使用了负数。MySQL 文档中有关 Select 语法的片段:

LIMIT 子句可用于限制 SELECT 语句返回的行数。LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量(使用准备好的语句时除外)。

因此,如果您确实需要负限制,那么解决该错误的方法是使用准备好的语句,正如@James 在他对您的问题的评论之一中所要求的那样。

请注意,select*这不会产生任何错误,但肯定会造成混淆!

于 2013-08-12T02:47:11.340 回答