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时尤其如此. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |