2012-10-22 58 views
2

我的引擎收錄僅訪問一個記錄: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因此該記錄將過濾這一天是不可用......

的Nodates表

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'表中的記錄。

所以我需要一個子查詢來實現這個或者是否還有其他方法?

+0

爲什麼不將日期存儲在MySQL ['DATE'](http://dev.mysql.com/doc/en/datetime.html)類型列中? – eggyal

+0

我不明白這個問題的邏輯。爲什麼只選擇rownum 1?你認爲的條件是什麼(邏輯上而不是編程)? – Amirshk

+0

是的,因爲其他原因,我這樣做,雖然DATETIME也不錯 – Sashikant

回答

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 IS NULL,則從中比較DDMMYYYY列沒有bus_notavailable記錄。

你要的是這個(移動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 
+0

謝謝!但在你的'WHERE'子句下bus_notavailable.bus_id IS NULL,但在這裏我的表沒有NULL值它是00 – Sashikant

+0

好吧它解決我的問題,謝謝理查德:)這是有幫助的 – Sashikant

+0

試試看吧。它是NULL,因爲LEFT JOIN失敗。這是一個存在測試。當總線在當天** NOT **可用時,LEFT JOIN成功,這將不適合過濾器'WHERE bus_notavailable.bus_id IS NULL',因此它從結果中被移除 – RichardTheKiwi

0

人))))))首先你沒有說你什麼想要實現。如果你想選擇在第二天可用的巴士,那麼你做對了。

第二行返回2行的原因是因爲如您所說選擇DD不等於11的記錄。並且在此表中,兩個記錄都是合適的。這就是爲什麼你得到2行。

如果您希望只選擇一個可用於特定日期的總線,以防萬一在此表中有多個日期,則應使用distinct關鍵字。

選擇不同的巴士,其中dd!= 11。你會得到一行))

我的意思是每條巴士只有一行。所以如果你在那天有10輛巴士,你將會有10條記錄。每輛公共汽車一個記錄。