2

我的粘贴箱:http: //pastebin.com/PmfDEdEw

你好,

我正在做一个公共汽车搜索脚本,这是一个名为“bus_notavailable”的表,它的字段为

nodate_id(PK)
bus_id(FK)
DD(INT 2)
MM(INT 2)
and YYYY(INT 4)

我的问题是:假设 Bus ID 为 1,这两个日期不可用,分别是 15-08-2013 和 26-01-2013,因此将过滤这一天的记录...

节点表

Nodate_id             bus_id        DD     MM     YYYY
1                     1             15     08     2013
2                     1             26     01     2013 

• 所以 bus_notavailable.DD != '26' 它向我展示了一条记录

• bus_notavailable.DD != '11' 然后它向我显示 2 条记录

我知道我犯了错误或不知道解决方案因此想找到摆脱的方法,并且知道这是一个一对多关系的问题,其中“bus_notavailable”有两个相同总线的 id 它向我展示'bus' 表中的两条记录。

那么我需要一个子查询来实现这一点还是有其他方法?

4

2 回答 2

0

男人))))))首先你没有说你想要实现什么。如果您想选择 DD 日可用的巴士,那么您做对了。

第二行返回 2 行的原因是因为正如您所说,您选择了 DD 不等于 11 的记录。在此表中,两条记录都是合适的。这就是为什么你得到 2 行。

如果您只想选择一个特定日期可用的巴士,以防此表中有很多日期,您应该使用 distinct 关键字。

选择 dd!=11 的不同总线。你会得到一排))

我的意思是每辆公共汽车只有一排。因此,如果您在该日期有 10 辆公共汽车可用,您将有 10 条记录。每辆公共汽车一个记录。

于 2012-10-22T23:14:53.890 回答
0

你的情况在这里

    LEFT JOIN bus_notavailable ON bus.bus_id = bus_notavailable.bus_id
           .....
    WHERE   ...... 
            bus_notavailable.bus_id IS NULL
            AND bus_notavailable.DD != '$DD'
            AND bus_notavailable.MM != '$MM'
            AND bus_notavailable.YYYY != '$YYYY'

是荒谬的,因为一旦 bus_id 为 NULL,就没有bus_notavailable记录可用于比较DDMMYYYY列。

您想要的条件是这样的(将 DD/MM/YYYY 移动到 LEFT JOIN ONcluse):

    LEFT JOIN bus_notavailable ON bus.bus_id = bus_notavailable.bus_id
            AND bus_notavailable.DD = '$DD'
            AND bus_notavailable.MM = '$MM'
            AND bus_notavailable.YYYY = '$YYYY'
           .....
    WHERE   ...... 
            bus_notavailable.bus_id IS NULL
于 2012-10-22T23:10:00.210 回答