我一直绞尽脑汁想弄清楚如何让它发挥作用。现在,我会在这里解释一下。
我要做的是,当用户在表单中输入内容时,它会返回查询结果,然后使用 查询的结果,执行另一个< / em>查询它们。我正在使用PHP和oracle数据库。
例如:目前我有一个充满食谱及其成分的数据库;我有一个用户可以输入成分的表格。在这个例子中,它是培根。
这很好用。但是,我难以实现的是当用户输入另一个成分时,当前表的结果在那里进一步查询。假设我输入'cheese',然后查询并显示包含培根 AND 奶酪的所有食谱。
这个过程很容易在简单的SQL中实现,但是就像我看到我在转移它以使用表单时遇到了困难。
现在,我知道解决方案可能与临时表,动态sql或两者的组合有关。
提前感谢您对此事的任何帮助。
我的代码如下:
<?php
if(isset($_POST['submit']))
{
$name = $_POST['name'];
}
function do_fetch($myeid, $s)
{
print '<table border="1">';
while ($row = oci_fetch_array($s, OCI_RETURN_NULLS+OCI_ASSOC)) {
print '<tr>';
foreach ($row as $item) {
print '<td>'.($item?htmlentities($item):' ').'</td>';
}
print '</tr>';
}
print '</table>';
print '<br>';
}
// Create connection to Oracle
$c = oci_connect("system", "luigi98", "localhost/XE");
// Use bind variable
$query = "SELECT DISTINCT r.recipeTitle AS recipe
FROM RECIPES.recipe r
WHERE recipeID IN(
SELECT r.recipeID
FROM recipes.recipeIng il
INNER JOIN RECIPES.ingredient i ON il.ingredientID = i.ingredientID
WHERE il.recipeID = r.recipeID
AND i.ING = :eidbv)";
$s = oci_parse($c, $query);
$myeid = $name;
oci_bind_by_name($s, ":EIDBV", $myeid);
oci_execute($s);
do_fetch($myeid, $s);
// Close the Oracle connection
oci_close($c);
?>
<p>Enter ingredient</p>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="name"><br>
<input type="submit" name="submit" value="Search"><br>
</form>
答案 0 :(得分:1)
有几种方法可以做到这一点。
最简单的方法可能是再次在搜索框中显示原始成分,并指示用户根据需要添加更多(按空格,逗号等分隔)成分。
然后,您可以在这些字符上展开搜索字词,并为每种成分添加条件。