【问题标题】:Php Mysql NOT IN array only affecting first result in arrayPhp Mysql NOT IN 数组只影响数组中的第一个结果
【发布时间】:2014-09-02 20:50:18
【问题描述】:

所以我有一个查询来创建一个我不想包含在填充我的选择列表的数据中的 ID 数组。选择列表和排除 ID 的数组都是从 mysql 数据库中提取的。我遇到的问题是,当我回显 $exclude 时,它​​会正确显示在逗号分隔的列表 (1,2,3) 中。但是,当我尝试在我的 NOT IN 语句中添加它时,它只排除了第一个数字。我需要它来排除整个数组。有什么想法吗?

<?php
$excludeSql = "SELECT member_id FROM appointments WHERE joint_id = '$jointid'";
$excludeData = mysql_query($excludeSql, $link);
while($excluderow = mysql_fetch_array($excludeData)){

    $excludearray[] = $excluderow['member_id'];

                              }
$exclude = implode(',',$excludearray);
echo $exclude;
?>
<select name="attendees[]">             
    <option value="">--Select--</option>

        <?php 
        $memberSql = "SELECT id, firstName, lastName FROM members WHERE id NOT IN('".$exclude."') && compid = '$compid' ORDER BY lastName ASC";
        $memberResult = mysql_query($memberSql, $link);
            while($memberRow = mysql_fetch_assoc($memberResult)){?>
                <option value="<?php echo $memberRow['id'];?>" ><?php echo "".$memberRow['lastName'].", ".$memberRow['firstName'].""; ?></option>
        <?php } ?>              
</select> 

【问题讨论】:

  • 您可以通过使用子选择来使用单个查询。
  • 如果 MySQL 能这样工作,生活将会如此美好。它只会采用数组的第一个值。您的查询中需要一个 OR NOT IN(或多个)。

标签: php mysql arrays notin


【解决方案1】:

这里不需要引用:

WHERE id NOT IN('".$exclude."')
                ^            ^

您也可以在一个查询中获得相同的结果:

SELECT 
  id, 
  firstName, 
  lastName 
FROM members 
WHERE id NOT IN
  (SELECT 
     member_id 
   FROM appointments 
   WHERE joint_id = '$jointid')

【讨论】:

  • @doublesharp 我不同意你的观点,内爆用引号括起来,以 '1,2,3' 结尾,你可以轻松尝试here。
  • 当我刚刚将第二个 SELECT 语句添加到 NOT IN 子句中时,它起作用了。谢谢!!
【解决方案2】:

你引用了你的排除 IDS,所以你已经把逗号分隔的数字列表变成了一个单一的字符串:

WHERE id NOT IN ('1,2,3,4')
WHERE id NOT IN (1,2,3,4)

以上两个是两个完全不同的陈述。一个是单个字符串,相当于id &lt;&gt; '1,2,3,4'。另一个是 IN 操作的 4 个数字的列表。

【讨论】:

  • 这不是问题,爆炸会解决这个问题。
  • 什么爆炸?那里只有一个内爆。 while 循环有什么问题?缩进是废话,但循环本身是有效的。
  • 对不起,我的意思是 implode - 它使用 ',' 作为胶水。
  • 所以?这与在实际查询字符串中使用这些逗号分隔值然后用' 引用的事实无关。
  • 你对 while 循环的看法是正确的 - 没有看到右花括号挂在那里。
猜你喜欢
  • 2020-01-13
  • 2015-09-15
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 2021-05-24
  • 2014-12-21
  • 2012-08-27
  • 2013-09-18
相关资源
最近更新 更多