我的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它向我展示了“巴士”表中的两条记录。
那么我需要一个子查询来实现这个目标还是有其他方法?
答案 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
记录来比较DD
,MM
或YYYY
列。
你想要的条件是这个(将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条记录。每辆公交车一条记录。