2013-10-24 144 views
-1

这似乎对任何人都不复杂,但它对我来说。复杂的Mysql查询 - PHP

我有一个使用IN子句的mysql查询。它收集与PHP阵列匹配的表中的所有数据。该阵列被称为$IdArray。对于这个示例的目的可以说$IdArray包含这些变量,['0','1','2','3']。因此,这里是我的代码,使用查询,

$secondArray = array(); 
    function apply_quotes($item){ 
     return "'" . mysql_real_escape_string($item) . "'"; 
    } 
    $idQuotes = array_map('apply_quotes', $IdArray); 
    $query = "SELECT * FROM ids WHERE id IN (" . join(',', $idQuotes) . ")"; 
    $results = mysql_query($query); 
    while($row = mysql_fetch_array($results)){ 
     if($row['id']){ 
       $secondArray[] = "YES"; 
     } 
     else{ 
       $secondArray[] = "NO"; 
      } 
    }//end while loop 

正如你可以告诉我改变$IdArray,因此它可以被放置到mysql_query()功能。现在$secondArray是我尝试存储响应的数组。我想要做的是如果存储在$IdArray中的一个数字存储在ids表中,则将YES置于$secondArray中。但是,如果$IdArray中的数字未存储在ids表中,则它会将NO存储到$storedArray中。

举个小例子,(我想要发生的事情),正如前面所说的,让我们说$IdArray包含['0','1','2','3']。 在表ids中存储号码13。所以当查询运行时$storedArray将包含这个['NO','YES','NO','YES']

目前我的代码不这样做!当$IdArray中的数字存储在ids表中时,它所做的只是存储YES。所以当查询运行时(使用上面的相同变量)$secondArray将存储这个['YES','YES']

当号码没有存储在ids表中时,我如何获得它以将NO存储到$secondArray中?

+0

这是预期的行为。 – hjpotter92

+0

为什么要麻烦评论?显然我在问一个问题。你没看过最后一句话吗? – user2861085

回答

0

开始从$IdArray基于数值数组中填写:

$secondArray = array_fill_keys($IdArray, "NO"); 

然后使用您的查询,并循环改变元素YES为存在于表中的每一行。

while ($row = mysql_fetch_array($results) { 
    $secondArray[$row['id']] = "YES"; 
} 
+0

这是一个好主意,但是当我回复结果时,它看起来像这样:[[“0:NO”,“1:YES”,“2:NO”,“3:YES”]'我不想要数字或引号内的冒号。我如何删除数字? – user2861085

+0

我的代码没有这样做,它只是将元素设置为“YES”或“NO”。 – Barmar