dongwu3747 2014-12-06 06:37
浏览 17

查询mysql其中一个简单的显示特定记录

I have a simple dB of real estate property listings. I am trying to do a very simple search to show records. Eg property location, type and price eventually. I am having trouble with the select statement especially if users submit blank fields. See code. Is there a better way to do this? I am OK on the bit that displays the records using a while loop. I am a newbie as I am sure you can tell.

<form action="search.php" method="post">

<table border="0" cellpadding="10" cellspacing="0">
<tr>
<td width="300"><b>Reference No</b></td>
<td><input type="text" name="Reference_No" maxlength="20" id="Reference_No" /></td>
</tr>

<tr>
<td><b>Property Name</b></td>
<td><input type="text" name="Property_Name" maxlength="30" id="Property_Name" /></td>
</tr>

<tr>
<td><b>Property Area</b></td>
<td>
<select name="Property_Area" id="Property_Area">
<option value="Ortaca">Ortaca</option>
<option value="Sarigerme">Sarigerme</option>
<option value="Other">Other</option>
</select>
</td>
</tr>

<tr>
<td><b>Property Type</b></td>
<td><select name="Property_Type" id="Property_Type">
<option value="Apartment">Apartment</option>
<option value="Land">Land</option>
<option value="Commercial Property">Commercial Property</option>
</select></td>
</tr>

<tr>
<td></td>
<td>
<input class="formsubmit" type="submit" value="Submit Enquiry" name="Submit" />
</td>
</tr>
</table>

</form>

$Reference_No = $_POST['Reference_No'];
$Property_Name = $_POST['Property_Name'];
$Property_Area = $_POST['Property_Area'];
$Property_Type = $_POST['Property_Type'];



$query = "SELECT * FROM properties WHERE (Live = 'yes' AND Property_Type = '$Property_Type') AND (Reference_No = '$Reference_No' OR Property_Name = '$Property_Name' OR Property_Area = '$Property_Area') ORDER BY Property_Area, Property_Price";
  • 写回答

1条回答 默认 最新

  • dsjpik057730 2014-12-06 08:29
    关注

    If i understand you correctly you want to get all properties if nothing is chosen, and limit selection by user choices .

    On SQL Server you could use intersect in the following way:

    $filters[] = "SELECT * FROM properties"
    if ($Property_Type)
        $filters[] = "SELECT * FROM properties WHERE Property_Type = '$Property_Type'";
    if ($Reference_No)
        $filters[] = "SELECT * FROM properties WHERE Reference_No = '$Reference_No'";
    if ($Property_Name)
        $filters[] = "SELECT * FROM properties WHERE Property_Name = '$Property_Name'";
    if ($Property_Area)
        $filters[] = "SELECT * FROM properties WHERE Property_Area = '$Property_Area'";
    
    $final_query = implode(' INTERSECT ', $filters)
    

    But MySQL does not support INTERSECT. In this case you could wrap filter over filter over filter ... etc

    $sql = 'SELECT * FROM properties';
    if ($Property_Type) 
        $sql = "SELECT * FROM ({$sql}) AS Q WHERE Property_Type = '$Property_Type'";
    if ($Reference_No) 
        $sql = "SELECT * FROM ({$sql}) AS Q WHERE Reference_No = '$Reference_No'";
    if ($Property_Name) 
        $sql = "SELECT * FROM ({$sql}) AS Q WHERE Property_Name = '$Property_Name'";
    if ($Property_Area) 
        $sql = "SELECT * FROM ({$sql}) AS Q WHERE Property_Area = '$Property_Area'";
    

    And yes, don't forget to either escape/sanitize all values prior inserting them into the query string or use parameterized query PDO or MySqli style.

    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值