php - MYSQL LEFT JOIN 返回重复表结果

标签 php mysql sql select left-join

更新 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_minprice_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.* 时,请为 propertyfloorplan< 的每个不同组合返回一行。但您只需要不同的 property 项目。

一般来说,拼写出您想要的特定列是个好主意。避免 p.* 检索所有列。当您使用 SELECT DISTINCT 时尤其如此。

关于php - MYSQL LEFT JOIN 返回重复表结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9640605/

相关文章:

php - Symfony 2 + Doctrine : How to supress SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry

sql - hive 仅选择前两位小数

python - 从 Python 调用时 SQL 存储过程未完成

php - 置顶帖子 wordpress 的样式

php - MySQL INSERT INTO 不工作

mysql - (mysql) 从 digikam 4.* 迁移到 5.* 时数据库迁移困难

sql - 在 Amazon Athena 中按索引选择行

php oops 包括另一个页面

php - 在我的 app.blade.php Laravel 中返​​回变量的最佳方法

mysql - 使用 INNER JOIN 有什么好处?