我正在创建一个搜索Meat包装数据库的多表单搜索框。仅当用户是特定的时,搜索才有效,我希望他们能够搜索数据库而无需选择特定选项。其中三个表单框供用户搜索宽度,高度和深度的所有数值,但只有当用户与大小完全匹配时,它们才会返回结果。我希望搜索能够返回最近的值,如果它找不到与用户输入的完全匹配的完全匹配。
如:
如果用户在宽度框中输入“252”,它将返回“未找到搜索” 但是数据库中有一个“251”。因此,如果用户键入“252”,则SQL查询会自动查找最接近的大小,然后在理论上显示“251”。
这是HTML和PHP:
<body>
<form action="form3.php" method="post">
<label for ="description">Description:</label>
<input type="text" name="descrip" /><br />
<label for ="trayheight">Trayheight:</label>
<input type="text" name="height" /> <br />
<label for ="traywidth">Traywidth:</label>
<input type="text" name="width" /> <br />
<label for ="traydepth">Traydepth:</label>
<input type="text" name="depth" /> <br />
<label for="trayrange">Trayrange: </label>
<select name="trayrange">
<option value=""></option>
<option value="BBQ">BBQ</option>
<option value="Dessert">Dessert</option>
<option value="Display">Display</option>
<option value="Meat">Meat</option>
<option value="Microwave">Microwave</option>
<option value="Party">Party</option>
<option value="Salad/Wet Pasta">Salad/Wet Pasta</option>
<option value="Snacks">Snacks</option>
<option value="Standard">Standard</option>
</select>
<label for ="traytype">Traytype: </label>
<select name="traytype">
<option value=""></option>
<option value="Open">Open</option>
<option value="Cavitised">Cavitised</option>
<option value="Lid">Lid</option>
<option value="Tray">Tray</option>
<option value="Coallition">Coallition</option>
<option value="Bowl">Bowl</option>
<option value="Hinge pack">Open</option>
<option value="Pot">Pot</option>
<option value="Base & Lid">Base and Lid</option>
<option value="Rectangular">Rectangular</option>
<option value="Specalist">Specialist</option>
</select><br />
<label for="trayshape">Trayshape: </label>
<select name="trayshape">
<option value=""></option>
<option value="Rectangular">Rectangular</option>
<option value="Oval">Oval</option>
<option value="Square">Square</option>
<option value="Insert">Insert</option>
<option value="Round">Round</option>
<option value="Open">Open</option>
</select><br />
<input type="submit" value="Submit" />
</form>
</body>
PHP:
<body>
<?php
$con = mysql_connect ("localhost", "root", "");
mysql_select_db ("delyn_db", $con);
if (!$con)
{
die ("Could not connect: " . mysql_error());
}
$descrip = mysql_real_escape_string($_POST['descrip']);
$height = mysql_real_escape_string($_POST['height']);
$width = mysql_real_escape_string($_POST['width']);
$depth = mysql_real_escape_string($_POST['depth']);
$varRange = mysql_real_escape_string($_POST['trayrange']);
$varType = mysql_real_escape_string($_POST['traytype']);
$varShape = mysql_real_escape_string($_POST['trayshape']);
$varImage = mysql_real_escape_string($_POST['imagename']);
$sql = "SELECT * FROM delyn WHERE
description LIKE '%".$descrip."%'
AND trayheight LIKE '%".$height."%'
AND traywidth LIKE '%".$width."%'
AND traydepth LIKE '%".$depth."%'
AND trayrange LIKE '%".$varRange."%'
AND traytype LIKE '%".$varType."%'
AND trayshape LIKE '%".$varShape."%' ";
$r_query = mysql_query($sql);
while ($row = mysql_fetch_array($r_query))
{
echo '<br /> Tool Code: '. $row['toolcode'];
echo '<br /> Description: '. $row['description'];
echo '<br /> Tray range: '. $row['trayrange'];
echo '<br /> Tray type: '. $row['traytype'];
echo '<br /> Tray size: '. $row['traysize'];
echo '<br /> Tray shape: '. $row['trayshape'];
echo '<br /> <img src=" '. $row['imagename'] . '"
width="200" length="100">' . '<br />' . '<br />';
}
if (mysql_num_rows($r_query) <= 0){
echo 'No results match your search, please try
again';
}
?>
</body>
如果有人能提供帮助,那将是非常好的,提前谢谢:)
编辑:
<body>
$scope = 20;
$width_min = $width - $scope;
$width_max = $width + $scope;
$depth_min = $depth - $scope;
$depth_max = $depth + $scope;
$height_min = $height - $scope;
$height_max = $height + $scope;
$sql = "SELECT * FROM delyn WHERE
description LIKE '%".$descrip."%'
AND traywidth LIKE '%".$width."%'
AND traydepth LIKE '%".$depth."%'
AND trayheight LIKE '%".$height."%'
AND trayrange LIKE '%".$varRange."%'
AND traytype LIKE '%".$varType."%'
AND trayshape LIKE '%".$varShape."%'";
if ($row = 0) {
$sql = "SELECT * FROM delyn WHERE
description LIKE '%".$descrip."%'
AND (traywidth BETWEEN ".$width_min." AND ".$width_max.")
AND (traydepth BETWEEN ".$depth_min." AND ".$depth_max.")
AND (trayheight BETWEEN ".$height_min." AND ".$height_max.")
AND trayrange LIKE '%".$varRange."%'
AND traytype LIKE '%".$varType."%'
AND trayshape LIKE '%".$varShape."%'";
}
<body>
答案 0 :(得分:1)
您可以根据表格中托盘宽度与用户输入宽度之间的绝对值计算,对条目列表进行排序,而不是使用固定的“上”和“下”边距。像这样:
select d.*, abs(d.traywidth - USER_SEARCH_INPUTTED_WIDTH) as WIDTH_ABS from delyn d order by WIDTH_ABS limit 20;
这将根据“USER_SEARCH_INPUTTED_WIDTH”为您提供附近托盘宽度的列表,例如252作为用户所处的相对“距离”以及数据库实际具有的条目。
注意:您允许在/中搜索的所有列都需要签名,否则您最终会得到时髦的结果(由于abs)。
答案 1 :(得分:0)
您可以使用SQL BETWEEN运算符。