(a,b)不在(阵列)

时间:2018-06-26 09:10:22

标签: php mysql sql

我正在尝试从一个表中获取所有数据,在该表上我有2个特定的列(宽度和高度)+其他数据,我还需要使用应用程序内部的数据数组来过滤它们。 我的内部数组看起来像这样,但是有多个条目:

$presetSize = Array (

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

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

)

我想做的事情是从数据库中获取所有数据,而在数组中找不到宽度和高度,在我的情况下,这表示自定义大小。

在mysql“ Where not in using two columns”中使用两列,我可以读取如何从另一张表中提取数据时使用表格选择来完成此操作,但是在这里,我有一个数组,其中的数组在尝试时会发送错误

我尝试过:

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

它返回

  

MySQL错误:“ where子句”中的未知列“ Array”

希望这个问题很清楚。

2 个答案:

答案 0 :(得分:0)

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

$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) ."))";

答案 1 :(得分:0)

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

$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 Fiddle