2014-09-28 70 views
0

編輯:表結構,http://puu.sh/bQKRz/785c731604.png即使MySQL的 「where」 子句不被滿足,它返回一個排

/* 
* Let's get a RANDOM question from the questions table 
* Ignore questions the group has already 
*/ 
Group.prototype.getRandomQuestion = function(callback){ 
    var self = this; 
    var answered = this.answered.join(); 
    var categories = this.categories; 

    var sql = "SELECT * FROM `questions` WHERE (`id` NOT IN (?) AND `category` IN (?)) ORDER BY RAND() LIMIT 1"; 

    this.mysql_pool.getConnection(function(err, conn){ 
     if(!err){ 
      conn.query(sql, [answered, categories], function(err, r){ 
       conn.release(); 

以上是我的代碼。出於某種原因,當它不應該時,它會不斷從數據庫中獲取至少一個結果。不應該滿足where子句。

我打開了PhpMyAdmin,運行相同的確切查詢,並插入相同的確切數據。它返回空。好。那麼爲什麼這段代碼沒有返回空呢?分別

下面是answeredcategories的值:

enter image description here

answered = 「1,2」

categories = 「1,2,3,4」

在我的questions表中,只有兩個問題。這兩個問題都有ID 1 & 2。那麼,爲什麼這段代碼仍然返回一行?

+0

它總是同一行嗎?如果是這樣,哪一行? – mscdex 2014-09-28 03:32:17

+0

另外,你有沒有嘗試強迫'categories'爲'this.categories.join();'而不是'this.categories'?也許'mysql'正在做一些意想不到的數組值。 – mscdex 2014-09-28 03:33:57

+0

@mscdex它總是第二行 – X33 2014-09-28 03:35:24

回答

2

假設我們有一個表,其中分別包含id爲1和2的兩行。

select * from table where id in ('1, 2') ==>你會得到它具有ID只有一行

select * from table where id not in ('1, 2') ==>你也將獲得其擁有ID

點只有一排('1,2')('1','2')不相同。

0

您可以給返回ID 2的數組提供完整的SQL嗎?抱歉把它作爲答案......不允許我發表評論。

+0

@Jiang這就是爲什麼我對整個SQL感興趣,如果它的數值數組單引號甚至不需要一個簡單的(1 ,2)就是所需要的。 – RobNHood 2014-09-28 03:52:47

+0

http://puu.sh/bQKRz/785c731604.png – X33 2014-09-28 03:55:25

+0

你說得對。我認爲這正是問題所在。 – Jiang 2014-09-28 03:57:28

0
var ID = new Array(1,2); 
var Categories = new Array(1,2,3,4,5); 

var IDstring = "'" + ID.join("','") + "'"; 
var Categoriesstring = "'" + Categories.join("','") + "'"; 

    var sql = "SELECT * FROM `questions` WHERE `id` NOT IN (" + IDstring + ") AND `category` IN (" + Categoriesstring + ") ORDER BY RAND() LIMIT 1"; 
相關問題