试图在PHP中进行复杂的搜索

时间:2014-10-27 15:26:40

标签: php mysql

方案

我目前有一个数据库连接到从localhost运行的PHP页面,其中一个PHP页面是 shop ,其中的项目是从数据库中填充的

我已允许用户搜索查找特定项目,例如:

"列出商店中<<< $ 5.00"

我已经实现了这一目标。我目前有四个简单搜索来搜索商店中的商品,这些搜索是:"类别","名称",&#34 ;可用性和#34;和"价格"

因此,如果用户输入了"礼品"那么所有的礼物都应该出现,那已经有效了。


虽然这些单一标准搜索会给出结果吗?我希望用户能够从中的所有四个三个两个条件选项中进行选择时间。

我构建PHP的尝试看起来有点像这样,但这不起作用。

    <?php 
    //check to make sure the form has been submitted and retrieve the contents of 
    //both things and make variables.
    if(isset($_POST['search'])){
    $get_price=$_POST['price'];
    $get_function=$_POST['Operation'];
    $get_name=$_POST['UserEnteredText'];

$get_Availability=$_POST['AvailabilityOperation'];
$get_Category=$_POST['CategoryOperation'];
//create the query to extract the data from the table and store
//the SQL query in a variable called $query
/*$query="SELECT * FROM friends WHERE name = '$get_name'";*/

if ($get_function == 'Higher')
{
$queryPrice="SELECT * FROM product WHERE price < $get_price";
}
else
{
$queryPrice="SELECT * FROM product WHERE price > $get_price";
}

if ($get_name = $get_name)
{
$queryName="SELECT * FROM `product` WHERE `Product Name` like '%$get_name%'";
}
else
{
//doesn't work  
}

if ($get_Availability == 'Now')
{
$queryAvailability="SELECT * FROM product WHERE availability LIKE '%Now%'";
}
elseif ($get_Availability == 'Out Of Stock')
{
$queryAvailability="SELECT * FROM product WHERE availability LIKE '%Out%'";
}
else
{
$queryAvailability="SELECT * FROM product WHERE availability";
}

if ($get_Category == 'Garden')
{
$query="SELECT * FROM product WHERE category LIKE '%Garden%'";
}
elseif ($get_Category == 'Gift')
{
$query="SELECT * FROM product WHERE category LIKE '%Gift%'";
}
elseif ($get_Category == 'Test')
{
$query="SELECT * FROM product WHERE category LIKE '%Test%'";
}

//the result set of the mysql_query function is then stored in
//an array called $result
$result=mysqli_query($connection, $queryPrice, $queryName, $queryAvailability, $get_Category);
//create while loop and loop through result set, reading each one 
//and displaying it through the use of an echo command

while ($row = mysqli_fetch_array($result)) {

    $itemname=$row['Product Name'];
    $itemPrice=$row['Price'];
     $itemavailability=$row['Availability'];
?>
    <div class="item">
        <h3><?php echo $itemname. " " ?></h3>
        <a href="<?php echo $row["Product Image Path"] ?>" data-lightbox="Perfecto">
            <img src="<?php echo $row["Product Image Path"] ?>" width="70" height="70" alt="Sculpture1"> </a>
        <br />
        Price: £<?php echo $itemPrice. " " ?>
        <form action="" method="post">
            <input type="submit" value="Buy" />
        </form>
    </div>


<?php
}

}
?>

问题

想知道是否有经验丰富的PHP程序员可以帮助我理解如何构建一个算法来获取所有这些值并产生与我的个人搜索相同的结果。

如果您想知道我是如何得出这个结论的,我试图将我的所有其他四个搜索(这一切都有效)结合到一个更复杂的搜索中。

真的很感激,谢谢。

2 个答案:

答案 0 :(得分:4)

SQL查询中的条件需要AND一起形成具有多个条件的单个查询。

通常,如果您想要所有匹配的对象

SELECT fruits FROM market WHERE color='green'

SELECT fruits FROM market WHERE price<5

解决方案是

SELECT fruits FROM market WHERE color='green' AND price<5

答案 1 :(得分:3)

您可以尝试根据传入的参数以编程方式构建查询,而不是使用IF / ELSE返回特定查询。例如。

$sql = "select * from `product` where `product name` like '%$get_name%'";
$sql .= (isset($get_price) ? " and `price` < $get_price" : "");
$sql .= (isset($get_Category) ? " and `category` LIKE '$GET_Category'" : "");

您最终会以这种方式编写更少的代码,并且随着搜索应用程序的增长,添加新条件会更容易。

干杯 灰