其中(a,b)不在(数组)中

c0vxltue  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(459)

我试图从一个表中获取所有数据,我有两个特定的列(宽度和高度)+其他数据,我还需要使用我在应用程序中拥有的数据数组对它们进行过滤。我的内部数组如下所示,但有多个条目:

$presetSize = Array (

    [0] => Array
        (
            [width] => 336
            [height] => 280
        )

    [1] => Array
        (
            [width] => 300
            [height] => 250
        )
.
.
.

)

我要做的是从数据库中获取所有数据,其中宽度和高度在数组中找不到,在我的例子中,这些数据表示自定义大小。
在mysql“where not in using two columns”中,使用两个列,我可以了解如何在从另一个表提取数据时使用select表单来实现这一点,但是这里有一个数组,其中的数组在尝试时会发送错误。
我试过:

SELECT * FROM items WHERE type = 1 AND (width, height) NOT IN (" . $presetSize . ");

它又回来了
mysql错误:“where子句”中的未知列“array”
希望这个问题足够清楚。

taor4pac

taor4pac1#

您可以在查询中插入一个变量并希望它能工作。您需要手动生成宽度-高度对:

$sizelist = array();
foreach ($presetSize as $size) {
    $sizelist[] = sprintf("(%d, %d)", $size["width"], $size["height"]);
}
$query = "SELECT * FROM items WHERE type = 1 AND (width, height) NOT IN (" . implode(", ", $sizelist) . ")";

这将生成以下(特定于mysql的)查询:

SELECT * FROM items WHERE type = 1 AND (width, height) NOT IN ((336, 280), (300, 250))

sql小提琴

zy1mlcev

zy1mlcev2#

这里有一个解决方案,您可以使用foreach width和height,然后在查询中使用它们:

$presetSize = Array (
[0] => Array
    (
        [width] => 336
        [height] => 280
    )

[1] => Array
    (
        [width] => 300
        [height] => 250
    )

    )

    $width=array();
    $height=array();

    foreach($presetSize  as $values)
    {
        $width[]=$values['width'];
        $height[]=$values['height'];

    }

 $query="SELECT * FROM items WHERE type = 1 AND (width, height) NOT IN ((" . implode(',',$width) . "), (".implode(',',$height) ."))";

相关问题