更新 Scroll to bottem for sql Code and output 我最近开始研究公寓数据库。数据库包含 2 个表
“属性”表存储有关公寓大楼的基本信息(联系信息和照片)。它由 propid
表 b“楼层平面图”存储有关出租的各个单元的信息。定价信息、面积和公寓类型。 floorplan
表也被 propid
列引用,以允许我们将 2 个表链接在一起。它也有自己的唯一标识符,但未被使用。
每个综合体通常有 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 提要上运行一个过滤器脚本。该脚本将确定 givin 属性中的最高和最低价格单位,并将这些值添加到属性表 price_min
和 price_max
上的 2 个新创建的列中。到目前为止,这已经足够好了,但该公司一直在插入更准确的搜索结果。
我看到的唯一其他选项是只运行查询,只返回 DISTINCT propid。然后运行第二个查询以检索实际数据。
即.
$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.*
时,请为 property
和 floorplan< 的每个不同组合返回一行
。但您只需要不同的 property
项目。
一般来说,拼写出您想要的特定列是个好主意。避免 p.*
检索所有列。当您使用 SELECT DISTINCT
时尤其如此。
关于php - MYSQL LEFT JOIN 返回重复表结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9640605/