MySql 限制显示少一个元素的查询

MySql query with limit showing one less element

我有一个生成网上商店的 php 文件 layout.The 问题是当我开始将产品拆分为页面时。我在可以找到每种产品的产品数据库中运行以下查询。有一个 producttype 列指定应在哪个菜单下显示。 查询

$sql = "SELECT id,descr, nm, img, price FROM c1640644.products WHERE 
producttype = '".$GLOBALS["useableproductid"]."' LIMIT ".($start-    1).",".$stop;

总有一行缺失 我使用 echo 在 运行 之前显示查询,它如下:

SELECT id,descr, nm, img, price FROM c1640644.products WHERE 
producttype = 'laptop' LIMIT 0,8

数据库简介: 目前产品有笔记本电脑、耳机、台式机3类。 当显示笔记本电脑时,它们来自 ID 1-17,而 ID=1 缺失。 ID 18-22 和 ID=21 的耳机丢失。缺少 ID 23-27 和 ID=23 的桌面。总是缺少相同的产品。

显示方式为:

while($row = $result->fetch_assoc()){
 echo $row["nm"]; //just an example echo in the code it gets displayed with design
  ...
}

谢谢大家的回答!

对观察到的行为('laptop' 的 "missing" 行和 'headphone' 的 "missing" 行)最合理的解释是这些行不满足谓词,与产品类型的平等比较。 (这假设少于 $stop-$start 行被 returned.

我会验证 producttype 的值。

SELECT producttype, COUNT(1)
  FROM c1640644.products
 GROUP BY producttype
 ORDER BY producttype

计数 returned 是否等于您希望 returned 的行数?特别是,我会寻找在视觉上接近 "laptop" 但不满足等式匹配的值,例如 'laptop ultra-portable''lapt0p'。这些值不满足与 'laptop' 的相等比较。


没有 ORDER BY 子句,MySQL 可以任意排列 return 行。使用 LIMIT 子句的查询结果是不确定的。具有 LIMIT 0,8LIMIT 8,16 的查询可能包含同一行。一行也可能是 "skipped".

如果情况是总是有 "one row missing",我怀疑在 while 循环之前有一个提取。问题中显示的循环看起来是正确的。也有可能 nm 列包含一个空字符串,这使得行看起来像是 "skipped"。为了调试它,考虑将 echo "row fetched"; 作为循环内的第一行。或者在循环 $i=0; 之前初始化一个计数器变量,然后在循环内递增 $i 并在调试输出的字符串中包含 $i