如何从我的查询中只访问一条记录

时间:2012-10-22 23:02:52

标签: php mysql

我的Pastebin:http://pastebin.com/PmfDEdEw

您好,

我正在做一个总线搜索脚本,这里有一个名为“bus_notavailable”的表,它的字段为

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

我的问题是:假设公共汽车ID为1,这两个日期不适用于15-08-2013和26-01-2013,所以这一天的记录将被过滤......

The Nodates Table

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它向我展示了“巴士”表中的两条记录。

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

2 个答案:

答案 0 :(得分: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为空,就没有bus_notavailable记录来比较DDMMYYYY列。

你想要的条件是这个(将DD / MM / YYYY移动到LEFT JOIN ON cluse):

    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

答案 1 :(得分:0)

男人))))))首先,你没有说出你想要达到的目标。如果您想选择在DD日可用的公交车,那么您做得对。

第二行返回2行的原因,因为你说你选择DD不等于11的记录。在这个表中,两个记录都是合适的。这就是你获得2行的原因。

如果您只想选择一个可用于特定日期的地址,以防此表中有多个日期,则应使用不同的关键字。

选择明确的总线,其中dd!= 11。你会得到一行))

我的意思是每辆公交车只有一排。因此,如果您在该日期有10辆巴士,您将拥有10条记录。每辆公交车一条记录。