2011-05-09 165 views
0

任何人都可以看到這個SQL查詢有什麼問題。Mysql不按預期返回結果

這不返回任何結果,但相同的查詢出來放在讓瓦爾計算,然後在mysql中返回結果3800+

$query = "SELECT * FROM twitter_user JOIN twitter_connection 
      ON (twitter_user.tu_id = twitter_connection.tc_tu_id) 
      WHERE tc_followyou = 1 AND tc_twitterapp_user_id = ". $mytwitterid . " 
      LIMIT " . $perpage . " OFFSET " . $twitter_offset; 

執行與此相同的查詢但是確實工作

$query = "SELECT * FROM twitter_user JOIN twitter_connection 
      ON (twitter_user.tu_id = twitter_connection.tc_tu_id) 
      WHERE tc_youfollow = 1 AND tc_twitterapp_user_id = ". $mytwitterid . " 
      LIMIT " . $perpage . " OFFSET " . $twitter_offset; 

的唯一不同的是使用tc_followyou vs tc_youfollow

兩者都在同一個表中,沒有NULL記錄和整數。

如果我採取完全相同的一段php代碼和交換tc_followyou tc_youfollow我得到一個結果。

我不知道爲什麼,但如果腳本亞馬遜RDS服務器的Mysql v5.5.8日誌上運行這只是一個問題,另一臺服務器運行MySQL 52年5月1日

按預期工作。

爲什麼服務器版本或字段名稱會導致此問題?

我很難過。

感謝斯蒂芬

UPDATE:這是解決。問題是我運行的實際代碼沒有限制。我不小心在數據庫上運行以獲得「總計」。這是因爲失敗的表有很多記錄,所以沒有返回結果。我接受了解決方案,因爲這個人幫助我通過幫助發現問題的思考過程來工作。

+0

PHP和SQL是不同的語言。嘗試單獨調試你的SQL查詢。 – 2011-05-09 10:59:38

+0

謝謝Alvaro,我試過這樣做,查詢直接在MYSQL中正常工作。這是通過php5執行到MYSQL不起作用,我不能爲我的生活找出原因。 – 2011-05-09 11:04:33

+0

爲防萬一,請在單引號字符串內對完整查詢進行硬編碼。您還可以用'COUNT(*)AS total'來代替'*'來放棄其他問題。 – 2011-05-09 11:35:18

回答

1

LIMIT如果您不使用ORDER BY來提供確定性的排序順序是不可靠的。按照設計,結果行的順序是任意的,除非您指示SQL對它們進行排序。當您使用LIMIT子句時,這可能會特別影響返回的行。

+0

再次感謝,即使我離開極限和偏移量,我也得到了相同的結果。 – 2011-05-09 11:05:30

+0

您提到了兩臺服務器,您確定它們具有相同的數據嗎? – 2011-05-09 11:11:23

+0

是的,我實際上將數據從工作服務器導出到另一臺服務器(InnoDB) – 2011-05-09 11:16:46