首页 > 解决方案 > 在mysql的where子句中使用未知长度的数组

问题描述

我正在编写一个 SQL 查询。我有一个长度未知的数组,我想通过在查询的 WHERE 子句中使用该数组来从 MySQL 中选择数据。这是我现在的查询,它工作正常

$sql = "SELECT DISTINCT messagesutou.SenderID from messagesutou where (messagesutou.SenderID !='$items[1]' AND messagesutou.SenderID !='$items[0]' AND messagesutou.SenderID !='$items[2]') AND messagesutou.RecieverID='$uid'";

但是在这里我知道数组(3)的长度,并且我只是使用带有索引的数组名称来进行测试。现在我想知道数组长度是否未知,那么我将如何编写这个查询?

标签: phpmysqlarrays

解决方案


$list = implode(',', $items);

SELECT DISTINCT SenderID 
FROM messagesutou 
WHERE 0 = FIND_IN_SET(SenderID, '$list')
  AND RecieverID='$uid'

或(取自Jens的回答,已被他删除)

SELECT DISTINCT SenderID 
FROM messagesutou 
WHERE SenderID NOT IN ($list)
  AND RecieverID='$uid'

区别 - 当值具有数字类型时SenderID,这两种变体都适用,只有当它们具有字符串类型时才适用,当它们具有字符串类型并包含逗号或刻度时则不适用。$items

但后者可能会被改编:

$list = '\''.implode('\',\'', $items).'\'';

SELECT DISTINCT SenderID 
FROM messagesutou 
WHERE SenderID NOT IN ($list)
  AND RecieverID='$uid'

它现在接受任何数据类型并允许使用逗号(但不包括记号 - 它们必须在内爆之前被引用)。


推荐阅读