繁体   English   中英

PHP MySql帮助进行复杂的多表查询

[英]PHP MySql help with complex Multiple table Query

我在MySql中为社区存储了一堆数据

我的初始社区表包含以下字段:

  1. id(主键)
  2. 名称
  3. 商标
  4. 地图
  5. 描述

然后,我将每个社区的不同数据存储在其他表中,如下所示:

表:community_amenities

  1. id (主键)
  2. 社区 -这引用了上面社区表中的id字段
  3. 便利设施 -这个社区以逗号分隔的便利设施列表-2,3,5,7,8等-这些数字引用另一个表中的ID

表:community_prices

  1. id (主键)
  2. 社区 -这引用了上面社区表中的id字段
  3. 价格 -逗号社区从另一个表分开的价格范围的列表为家庭,这些数字参考标识

表:社区产品

  1. id (主键)
  2. 社区 -这引用了上面社区表中的id字段
  3. 产品 -用逗号分隔的社区中房屋类型的列表,这些数字引用了另一个表中的ID

然后,我得到一个带有许多复选框的表格,让用户可以选择他们感兴趣的便利设施,价格范围和产品,如下所示:

<input name='amenities[]' type='checkbox' value='1'/>
<input name='amenities[]' type='checkbox' value='2'/>
<input name='amenities[]' type='checkbox' value='3'/>
<input name='amenities[]' type='checkbox' value='4'/>
<input name='amenities[]' type='checkbox' value='5'/>


<input name='prices[]' type='checkbox' value='1'/>
<input name='prices[]' type='checkbox' value='2'/>
<input name='prices[]' type='checkbox' value='3'/>
<input name='prices[]' type='checkbox' value='4'/>
<input name='prices[]' type='checkbox' value='5'/>

所以我的问题是

我需要获取他们从表单中选择的项目,并查询数据库以显示符合条件的社区。

我可以使用以下字段之一来做到这一点:

$priceArray = $_POST['price'];

$selectPrice = join(',',$priceArray);

$sql = mysql_query("SELECT * FROM community_prices WHERE prices IN ($selectPrice)");

但是我需要对所有表进行处理,并且只需要返回符合所有选定条件的社区。

我尝试了很多不同的方法(UNION,JOIN),但是没有运气。 任何帮助将不胜感激。

因此,您想要所有符合给定价格,便利性和产品标准的社区吗? 所有这些假设都是基于您在示例中列出的IN语句将创建有效匹配的假设。

$priceArray = $_POST['prices'];
$amenityArray = $_POST['amenities'];
$productArray = $_POST['products'];

$prices = join(',',$priceArray);
$amenities = join(',',$amenityArray);
$products = join(',',$productArray);

$sql  = "SELECT c.* ";
$sql .= "FROM communities c ";
$sql .= "  INNER JOIN community_amenities ca   ON c.id = ca.community ";
$sql .= "  INNER JOIN community_prices cpri    ON c.id = cpri.community ";
$sql .= "  INNER JOIN community_products cpro  ON c.id = cpro.community ";
$sql .= "WHERE ca.amenity IN ($amenities) ";
$sql .= "AND   cpri.price IN ($prices) ";
$sql .= "AND   cpro.product IN ($products) ";

$result = mysql_query($sql);

显然,您需要调整我弄错的任何表/列名称。 您还应该添加条件逻辑以仅介绍特定查询所需的INNER JOIN和WHERE条件。 例如,如果用户未选择舒适度作为标准,则不包括舒适度的“内部联接”或“位置”条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM