php
  • mysql
  • 2011-09-05 98 views 0 likes 
    0

    我似乎無法得到這個工作,MySQL SELECT查詢語法 - 不按預期工作?

    基本上,我想要做的是返回,其中列timestamp比可變$timestamp更多的所有行,列hit_counter小於列max_hits

    獲得第一部分工作不是問題,但第二部分似乎是,因爲它仍然提取行時hit_counter是多於max_hits

    這裏是我的代碼:

    $query = "SELECT * FROM links WHERE timestamp >= '$timestamp' AND hit_counter >= 'max_hits' AND overflow = 'NO'"; 
    $result = mysql_query($query); 
    $size = mysql_num_rows($result); 
    

    這似乎返回所有正確的行爲timestamp,但仍繼續選擇行,其中hit_counter超過max_hits(即使它不應該選擇任何以全部爲>=大於或等於),而將>=反轉爲<=即使在數學上也不返回任何結果,它是有效的。

    我想也許我錯誤地將max_hits作爲一個值引用,因爲我不明白它爲什麼在起作用?

    我知道我的問題有點不確定,所以如果你需要任何澄清,請問:)。

    任何答案/幫助將不勝感激!

    UPDATE:

    我已經更新了查詢按下面的許多偉大的答案,(去掉「」包圍max_hits,改變>=<=但它仍然會返回其並不意味着被列入行通過查詢

    這裏有一個引擎收錄到我的全碼:http://pastebin.com/V4vXJr1w

    這裏是我的表結構的鏈接:https://docs.google.com/spreadsheet/ccc?key=0AoELUDjfbpSXdEUybkgwQmpxUnVCWlZOZnFJdzFaQmc&hl=en_GB

    +0

    掛在第二,你有什麼期待'hit_counter> = max_hits'返回?你似乎很驚訝它返回的結果是hit_counter大於max_hits ...但這正是你所要求的。對不起,如果我錯過了什麼,你會介意澄清嗎? – mwan

    +0

    @ mwan100:將'> ='改成'<='在這個實例中沒有返回結果,至少'> ='返回結果,原因是什麼,問題是'max_hits'被單引號,即解釋爲一個字符串,正如在下面的答案中已經指出:)。 – Avicinnian

    +0

    你能給我們多一些關於哪些行被返回的信息嗎?如果將hit_counter全部退出,你會得到相同的行數嗎? –

    回答

    3

    我認爲,如果你刪除圍繞「max_hits語錄它會工作:

    $query = "SELECT * FROM links WHERE timestamp >= '".$timestamp."' AND hit_counter <= max_hits AND overflow = 'NO'"; 
    

    的問題是,你指的是字符串「max_hits」,而不是列值。

    +0

    $ query =「SELECT * FROM links WHERE timestamp> ='$ timestamp'AND hit_counter <= max_hits AND overflow ='NO'」; – NateB

    +0

    仍然無法正常工作:(我已經用更多的信息更新了我的OP,我一直試圖深入到這個惡魔代碼的底部(敲出錯誤)3個小時,希望這會是最後的問題:)。我想你看看,這將非常感謝:),如果不是,感謝您的輸入無論如何:)! – Avicinnian

    +0

    我不知道這是否重要,但您可以嘗試包裝$ timestamp - 我會更改我的代碼以顯示我的意思。 –

    1
    $query = "SELECT * FROM links WHERE timestamp >= '$timestamp' AND hit_counter >= 'max_hits' AND overflow = 'NO'"; 
    

    如果max_hits是一列,則需要丟失引號。

    $query = "SELECT * FROM links WHERE timestamp >= '$timestamp' AND hit_counter >= max_hits AND overflow = 'NO'"; 
    
    +0

    感謝您的輸入,但它仍然不起作用(''=''應該是'<=':) :))。我已經更新了我的OP,如果你想看看? – Avicinnian

    0

    有兩件事對我來說一眼就看不對。

    1. 如果你想一列對另一個你不想引用列名比較時,MySQL只看到的,作爲您hit_counter列對字符串「max_hits」比較。

    2. 也許我誤解了你,但我認爲你已經有一個比你更大的跡象倒退了。它應該大致是:

      SELECT * FROM鏈接WHERE時間戳> = '$時間戳' AND hit_counter < max_hits和溢流= 'NO'

    +0

    是的,這就是我正在尋找,但它仍然無法正常工作:(。如果你想看看我已經更新了我的OP?感謝您的輸入;)。 – Avicinnian

    相關問題