php – MYSQL LEFT JOIN返回重复表的结果

更新滚动到bottem for sql代码输出
我最近开始在公寓数据库上工作.该数据库包含2个表

表“财产”存储有关公寓大楼基本信息(联系信息和照片).它由列propid引用

表b“平面图”存储有关个人租赁单位的信息.定价信息,平方英尺和公寓类型.平面图表也由列propid引用,以允许我们将两个表链接在一起.它也有自己的唯一标识符,但未使用.

每个综合体通常有5-10个平面图.

我正在为我们的客户在我们的网站上创建一个前端搜索界面.我需要能够搜索具有符合搜索条件的平面图的属性.但是在执行join语句时,我注意到每次发现其中一个平面图符合搜索条件时,它就会一直给我一个包含相同属性的列表.

我做了一些关于这个问题的研究.最常见的答案是使用SELECT disTINCT.

问题是我需要更多,然后才能返回propid作为结果.

我尝试过这样的事情:

SELECT disTINCT (p.propid), p.*, f.* FROM property AS p 
LEFT JOIN floorplans AS f ON p.propid = f.propid
WHERE f.pricespecial BETWEEN [min_price] AND [max_price];

[min_price]和[max_price]由用户提供.

预期结果将是具有满足所有用户搜索条件的平面布置图的所有属性的列表.但是我不想为每个匹配单元返回相同的属性.

当我运行此查询时,我仍然会获得重复的属性

在过去,我只是在包含数据的xml Feed上运行过滤器脚本.该脚本将确定givin属性中的最高和最低价格单位,并将这些值添加属性表price_min和price_max中的2个新创建的列.到目前为止这已经足够好了,但该公司一直在努力寻求更准确的搜索结果.

我看到的唯一其他选项是只运行查询,只返回disTINCT propid.然后运行第二个查询以检索实际数据.

I.E.

$sql = "SELECT disTINCT p.propid FROM property as f" .
       "LEFT JOIN floorplans AS f" . 
       "WHERE f.price BETWEEN " . $_REQUEST['price_min'] . " AND " . $_REQUEST['price_max'] . "

编辑**

一些示例输出使用新修订的sql语句.

propid  name    pricespecial  
4230A   2222 Smith Street   $1225-1450  
4230A   2222 Smith Street   $1895-2045  
4230A   2222 Smith Street   $2220  
4679A   City Place Midtown  $1230-1599  
4679A   City Place Midtown  $1595-1650  
4679A   City Place Midtown  $1699-2195  
4572A   Gables Memorial Hills   $1308-2159  
4572A   Gables Memorial Hills   $2050-2693  
4606A   Venue Museum district   $1535-1930  
4606A   Venue Museum district   $1980-2550  

我在发布这条评论时遇到了麻烦所以我只是编辑了我的问题.

解决方法:

你得到这些重复,因为你要求他们.

你要

   SELECT disTINCT p.propid, p.*
     FROM property   AS p 
LEFT JOIN floorplans AS f ON p.propid = f.propid
    WHERE f.price BETWEEN [min_price] AND [max_price]

当你说SELECT …,f.*你说,给我一个属性和平面图的每个不同组合的行.但是你只需要不同的属性项.

通常,拼出您想要的特定列是个好主意.避免使用p.*来检索所有列.当您使用SELECT disTINCT时尤其如此.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...