Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql和php数组的混合_Php_Mysql_Arrays - Fatal编程技术网

mysql和php数组的混合

mysql和php数组的混合,php,mysql,arrays,Php,Mysql,Arrays,我有一张这样的桌子 id | type | number 1 | c | 2 2 | c | 10 3 | c | 20 ( SELECT * FROM table WHERE number >= $array[ type ] ) 我还得到了带有值的PHP数组: $array[c] = 5; $array[d] = 10; 我想做这样的事 id | type | number 1 | c | 2 2 | c | 10 3 | c

我有一张这样的桌子

id | type | number
1  |  c   |  2
2  |  c   |  10
3  |  c   |  20
( SELECT * FROM table WHERE number >= $array[ type ] ) 
我还得到了带有值的PHP数组:

$array[c] = 5;
$array[d] = 10;
我想做这样的事

id | type | number
1  |  c   |  2
2  |  c   |  10
3  |  c   |  20
( SELECT * FROM table WHERE number >= $array[ type ] ) 
因此,类型可以以某种方式从mysql列中获取,并用于从数组中查找正确的值

这有点棘手,但我不确定我能问得多好。

试试这个:

$type = 'c';
$query = "SELECT * FROM table WHERE number >= " . intval( $array[ $type ] ) . " AND type = '" . $type . "'";
试试这个:

$type = 'c';
$query = "SELECT * FROM table WHERE number >= " . intval( $array[ $type ] ) . " AND type = '" . $type . "'";
尝试分两步进行: 在使用sql查询将类型为的值放入数组之前

然后过一会儿

  ( SELECT * FROM table WHERE number >= $array[$i] )
其中$i是while循环的索引

请尝试分两步执行: 在使用sql查询将类型为的值放入数组之前

然后过一会儿

  ( SELECT * FROM table WHERE number >= $array[$i] )

其中$i是while循环的索引

这不是最优雅的方式,而是类似的方式

$where = "WHERE ";

foreach($array as $key => $value)
{
    $where .=  "(type = $key AND number >= $value) OR";
}

$where = substr($where, 0, strlen($where)-2);
您必须将其附加到select语句中,然后运行查询


希望这能让其他人理解并提供更优雅的解决方案。

这不是最优雅的方式,而是类似的方式

$where = "WHERE ";

foreach($array as $key => $value)
{
    $where .=  "(type = $key AND number >= $value) OR";
}

$where = substr($where, 0, strlen($where)-2);
您必须将其附加到select语句中,然后运行查询


希望这能让其他人理解并提供更优雅的解决方案。

可能比使用大量WHERE子句要好一点,如下所示:-

SELECT *
FROM table a
INNER JOIN
    (SELECT 'c' AS RowType, 5 AS RowVal
    UNION
    SELECT 'd', 10) Sub1
ON a.type = Sub1.type AND a.number >= Sub1.RowVal
<?php
$SubQuery = array();
foreach ($array AS $key=>$value)
{
    $SubQuery[] = "SELECT '$key' AS RowType, $value AS RowVal";
}

$sql = "SELECT *
FROM table a
INNER JOIN (".implode(" UNION ", $SubQuery).") Sub1
ON a.type = Sub1.type AND a.number >= Sub1.RowVal";

?>
设置一个仅获取常量的子选择,然后在该子选择和现有表之间进行连接

在php中,您可以执行以下操作:-

SELECT *
FROM table a
INNER JOIN
    (SELECT 'c' AS RowType, 5 AS RowVal
    UNION
    SELECT 'd', 10) Sub1
ON a.type = Sub1.type AND a.number >= Sub1.RowVal
<?php
$SubQuery = array();
foreach ($array AS $key=>$value)
{
    $SubQuery[] = "SELECT '$key' AS RowType, $value AS RowVal";
}

$sql = "SELECT *
FROM table a
INNER JOIN (".implode(" UNION ", $SubQuery).") Sub1
ON a.type = Sub1.type AND a.number >= Sub1.RowVal";

?>

可能比使用大量WHERE子句要好一些,如下所示:-

SELECT *
FROM table a
INNER JOIN
    (SELECT 'c' AS RowType, 5 AS RowVal
    UNION
    SELECT 'd', 10) Sub1
ON a.type = Sub1.type AND a.number >= Sub1.RowVal
<?php
$SubQuery = array();
foreach ($array AS $key=>$value)
{
    $SubQuery[] = "SELECT '$key' AS RowType, $value AS RowVal";
}

$sql = "SELECT *
FROM table a
INNER JOIN (".implode(" UNION ", $SubQuery).") Sub1
ON a.type = Sub1.type AND a.number >= Sub1.RowVal";

?>
设置一个仅获取常量的子选择,然后在该子选择和现有表之间进行连接

在php中,您可以执行以下操作:-

SELECT *
FROM table a
INNER JOIN
    (SELECT 'c' AS RowType, 5 AS RowVal
    UNION
    SELECT 'd', 10) Sub1
ON a.type = Sub1.type AND a.number >= Sub1.RowVal
<?php
$SubQuery = array();
foreach ($array AS $key=>$value)
{
    $SubQuery[] = "SELECT '$key' AS RowType, $value AS RowVal";
}

$sql = "SELECT *
FROM table a
INNER JOIN (".implode(" UNION ", $SubQuery).") Sub1
ON a.type = Sub1.type AND a.number >= Sub1.RowVal";

?>


既然
$array[c]
是一个整数,那么究竟是什么阻止您将其用作参数?
其中type=c,number>=5
用于
$array[c]=5
你的意思是?@YourCommonSense这也是我所能理解的。我想他的意思是,对于数组中的所有整数,根据键得到相应的值,这是数据库中类型字段中的值。。。所以,如果type=c,number>5,如果type为d,number>10,但他需要在一个语句中完成这一切。我能看到的唯一方法是使用PHP生成一个包含大量ORs的大型WHERE子句。这有点奇怪:
WHERE(type=c和number>5)或(type=d和number>10)
Mathew是对的,我不能用WHERE-type=c和number>=5,因为我有6种类型和数字,从1到50,我想从数据库中获取更少的mysql行。因为
$array[c]
是一个整数,究竟是什么阻止您将其用作参数?
其中type=c,number>=5
用于
$array[c]=5
你的意思是?@YourCommonSense这也是我所能理解的。我想他的意思是,对于数组中的所有整数,根据键得到相应的值,这是数据库中类型字段中的值。。。所以,如果type=c,number>5,如果type为d,number>10,但他需要在一个语句中完成这一切。我能看到的唯一方法是使用PHP生成一个包含大量ORs的大型WHERE子句。这有点奇怪:
WHERE(type=c和number>5)或(type=d和number>10)
Mathew是对的,我不能使用WHERE-type=c和number>=5,因为我有6种类型和1到50的数字,我想从数据库中获取较少的mysql行。如果我获取了多个类型,我该怎么办?实际上,我从mysql中获取了6种类型。如果我获取了多个类型,该怎么办?事实上,我从mysql中获取了6种类型。我测试了这一种,它可以正常工作。也很简单。我想这个答案最能回答我的问题;]尽管如此,我没有测试kickstart的答案,因为它更长。两者都可以完成任务。此解决方案可能会提供更易于一目了然阅读的SQL。我的解决方案避免了重复的ORs,如果检查数量过大,可以很容易地更改为使用临时表,而不是选择值进行连接。如果我使用这个解决方案,我会尝试将每个检查放入一个数组中,然后对数组进行内爆以创建WHERE(就像我在解决方案中所做的那样),但主要是因为我有点不喜欢建立一个字符串,然后切掉多余的或。如果使用了substr,则无需使用strlen,substr接受一个负的第三个参数。我同意@Kickstart,我的方法不是一个非常实用的方法,因为它会创建大量的SQL字符串或粘在一起的语句。这是我通常会避免的,但我会像这样打出来,以帮助其他人理解这个问题。我测试了这个,它工作了。也很简单。我想这个答案最能回答我的问题;]尽管如此,我没有测试kickstart的答案,因为它更长。两者都可以完成任务。此解决方案可能会提供更易于一目了然阅读的SQL。我的解决方案避免了重复的ORs,如果检查数量过大,可以很容易地更改为使用临时表,而不是选择值进行连接。如果我使用这个解决方案,我会尝试将每个检查放入一个数组中,然后对数组进行内爆以创建WHERE(就像我在解决方案中所做的那样),但主要是因为我有点不喜欢建立一个字符串,然后切掉多余的或。如果使用了substr,则无需使用strlen,substr接受一个负的第三个参数。我同意@Kickstart,我的方法不是一个非常实用的方法,因为它会创建大量的SQL字符串或粘在一起的语句。这是我通常会避免的,但我会这样打出来,以帮助其他人理解这个问题。