将查询结果限制为特定行

时间:2015-12-08 14:03:24

标签: php mysql

假设我从php中获取了一个包含以下项目的mysql数组:

  

A,B,B,B

我在数组上做了一个foreach并检查每个项目。对于每个项目,我运行一个返回另一个值的查询。在第一个项目我没有问题,因为以下查询只返回一个项目:

SELECT id, id_ogg FROM rischiatura WHERE id_ruolo = 'RU010000003' AND id_ndg = '$ndg'

其中$ ndg值取自数组。所以在第一次运行中我得到id_ndg ='A'。

在其他运行中,查询每次返回三个结果(没关系 - 数组中有三个相同的项=从此查询返回的三行)。 我的问题是: 在foreach循环内部如何运行此查询将结果限制为第一次返回的第一行,第二次运行中的第二行和第三次运行中的第三行?

起点是:

foreach($items as $ndg){
    SELECT id, id_ogg FROM rischiatura WHERE id_ruolo = 'RU010000003' AND id_ndg = '$ndg';
}

我正在寻找一些代码,这些代码既可以用于单个项目,也可以用于B,每次都会返回三个结果中的一个。

2 个答案:

答案 0 :(得分:1)

SELECT ... WHERE ... LIMIT 0, 1
SELECT ... WHERE ... LIMIT 1, 1
SELECT ... WHERE ... LIMIT 2, 1

LIMIT的参数是起始偏移量(可选)和要返回的行数。但如果是我,我会在第一个查询的结果中检测到重复,并只处理一个后续查询中的三行:

# (Remove duplicates from $items, then ...)
foreach($items as $ndg){
    $result = mysql_query("SELECT id, id_ogg FROM rischiatura 
                                 WHERE id_ruolo = 'RU010000003' AND id_ndg = '$ndg'");
    while ($row = mysql_fetch_row($result)) {
         # Process each result row: no duplication
    }

}

当然,您可以同样的方式使用mysqliPDO;这是为了说明(认可mysql_* API)。

答案 1 :(得分:0)

如果像你提到的那样解决:

<?php
$items = array('A', 'B', 'B', 'B');
$unique = array_count_values($items);
foreach ($unique as $key => $value){
    for($i = 0; $i < $value; $i++){
        echo "SELECT * FROM `bla_bla` WHERE `bla` = '$key' LIMIT $i, 1\n";
    }
}
?>

给出

SELECT * FROM `bla_bla` WHERE `bla` = 'A' LIMIT 0, 1
SELECT * FROM `bla_bla` WHERE `bla` = 'B' LIMIT 0, 1
SELECT * FROM `bla_bla` WHERE `bla` = 'B' LIMIT 1, 1
SELECT * FROM `bla_bla` WHERE `bla` = 'B' LIMIT 2, 1