代码之家  ›  专栏  ›  技术社区  ›  Dreamcube

使用RETs数据的MySQL查询噩梦

  •  0
  • Dreamcube  · 技术社区  · 14 年前

    对于你们这些真正钻研过RETS的人,也许可以帮我一把。当多个属性绑定到RETS数据时,即使该属性已售出,也会出现问题。基本上,我需要的是能够用SELECT语句对照三个字段检查数据库。所讨论的字段将是Cúu StreetName、Cúu StreetNumber和C戋u PostalCode。

    为了说明这一点,我想要的是在收集数据集时检查重复项的某种方式,这不能在php中完成,因为数据是如何通过应用程序返回的。因此,如果它找到另一个具有相同C_StreetName、C_StreetNumber和C_PostalCode的记录,它将从数据集中删除它们。理想情况下,如果它还可以检查两个的状态,以确定其中一个是否过期或出售,然后再将其从数据中删除,那将是一件好事。

    我不熟悉复杂的SQL函数,我一直在研究IF语句,直到我发现它只能在存储数据时使用,而不能反过来使用。还有案例陈述,但似乎不管用。

    如果你们对我该用什么有什么建议,我会很感激的。希望有一种方法可以做到这一点,并且记住这只是我正在访问的一个表,我没有任何连接。

    提前谢谢。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Jim Garrison    14 年前

    这里有些东西可以让你朝正确的方向走。我还没有测试过,也不确定是否可以在mysql的max()中嵌套case表达式。

    这样做的目的是为街道名称、号码和邮政编码的唯一组合输出一行,状态为“过期”或“已售出”优先于其他值。也就是说,如果有“过期”的行,它将优先输出到未过期的和未售出的,如果存在,“卖出”的行将被输出,不管该属性存在什么其他行。case语句只是将状态代码转换为可排序的内容。

    select 
        C_StreetName, 
        C_StreetNumber, 
        C_PostalCode,
        max(
            case status
                when 'Expired' then 1 
                when 'Sold'    then 2
                else 0 
            end) as status
        group by 
            C_StreetName, 
            C_StreetNumber, 
            C_PostalCode;