1

我有这样的mysql表

id | type | number
1  |  c   |  2
2  |  c   |  10
3  |  c   |  20

我也得到了带有值的PHP数组:

$array[c] = 5;
$array[d] = 10;

我想做这样的事情

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

以便可以以某种方式从 mysql 列中获取该类型,并用于从数组中查找正确的值。

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

4

4 回答 4

1

这不是最优雅的方式,而是像这样?

$where = "WHERE ";

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

$where = substr($where, 0, strlen($where)-2);

您必须将其附加到您的选择语句,然后显然运行查询。

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

于 2013-05-29T16:27:39.227 回答
0

尝试这个:

$type = 'c';
$query = "SELECT * FROM table WHERE number >= " . intval( $array[ $type ] ) . " AND type = '" . $type . "'";
于 2013-05-29T16:21:18.307 回答
0

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

然后过一会儿

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

其中 $i 是 while 循环的索引

于 2013-05-29T16:26:27.660 回答
0

可能比使用大量 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中做了这样的事情: -

<?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";

?>
于 2013-05-29T16:33:47.227 回答