我想从具有项目编号列表的项目表中选择一个范围,如下所示:
id item_no qty date
1 1l500bk 15 2015-03-20
2 1l501bu 10 2015-03-20
3 1l1501ye 5 2015-03-21
4 1l1520bu 5 2015-03-21
5 1l1521bk 1 2015-03-22
我创建了一个包含两个输入字段的表单,要求用户输入“起始商品编号”和“结束商品编号”,如下所示:
<input type="text" value="" placeholder="From Item Number" name="item1">
<input type="text" value="" placeholder="To Item Number" name="item2">
现在,当我输入 FROM 1l1500 - TO 1l1600 .. 它应该输出此范围内的所有值,但事实并非如此!输出没有显示任何内容。但是,如果我输入 1l1500bk 到 1l1521bk,它只会显示 1 个输出( 1l1500bk )?!
这是页面提交后的 PHP 代码:
$query = "SELECT *,SUM(qty) from s_{$value} WHERE item_no BETWEEN '".$_POST['item1']."' AND '".$_POST['item2']."'";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)){
echo "<tr><td align=center width=19%>{$value}</td><td align=center width=19%>{$row['item_no']}</td><td align=center>{$row['qty']}</td><td align=center>{$row['date']}</td></tr>";
}
我希望这对你们来说有意义,我似乎找不到问题所在! 谢谢
<小时/>感谢@Waleed Ahmed 的帮助 我的问题的解决方案是将 id 分组如下:
$query = "SELECT *,SUM(qty) from s_{$value} WHERE item_no BETWEEN '".$_POST['item1']."' AND '".$_POST['item2']."'" GROUP BY id;
加:如果你想进行部分文本搜索
$length = max(strlen($_POST['item1']), strlen($_POST['item2']));
$query = "SELECT *,SUM(qty) from s_{$value} WHERE SUBSTRING(item_no, 1, ".$length.") BETWEEN '".$_POST['item1']."' AND '".$_POST['item2']."'" GROUP BY id;
即使您不输入完整的商品编号,也会输出数据。
最佳答案
根据此查询,它将仅显示一个结果作为输出。要在这里使用聚合函数(sum(qty)),您必须使用“Group By”一词来显示所有结果。例如
未经测试,希望它能工作
$query = "SELECT *,SUM(qty) from s_{$value} WHERE item_no BETWEEN '".$_POST['item1']."' AND '".$_POST['item2']."'" GROUP BY id;
关于PHP从mysql中选择数据文本范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36116433/