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