检查数值是否在数据库中多次

时间:2012-03-04 13:10:14

标签: php mysql

我有一个表A,只有两列:'id'和'might'。我需要查看一长串ID,并确定每个ID是否在A中并且概率为“1”。最好的方法是什么?

我认为最好在脚本开头有一个来自A的大查询,然后在我循环每个id时,我检查第一个查询。但比我意识到我不知道怎么做(有效)。我的意思是,无论如何将第一个查询的所有结果加载到一个数组而不是in_array()检查?我应该提一下,第一个查询应该没有结果,10以下(而表A可能非常大)。

另一个解决方案是在A中为每个id执行单独的查询,同时我循环它们。但这似乎不是很有效......

有什么想法吗?

5 个答案:

答案 0 :(得分:4)

如果你有数组中的初始id列表,你可以使用php implode 这样的函数:

$query = "select id 
          from A
          where id in (".implode (',', $listOfIds).")
          and probability = 1";

现在您将字符串作为 mysql_query 的第一个参数传递,并接收初始列表中概率= 1的ID列表。

答案 1 :(得分:2)

// $skip the amount of results you wish to skip over
// $limit the max amount of results you wish to return
function returnLimitedResultsFromTable($skip=0, $limit=10) {

    // build the query
    $query = "SELECT `id` FROM `A` WHERE `probability`=1 LIMIT $skip, $limit";

    // store the result of the query
    $result = mysql_query($query);

    // if the query returned rows
    if (mysql_num_rows($result) > 0) {
        // while there are rows in $result
        while ($row = mysql_fetch_assoc($result)) {
            // populate results array with each row as an associative array
            $results[] = $row;
        }
        return $results;
    } else {
        return false;
    }

}

每次调用此函数时,您需要将跳过十次,以便检索接下来的十个结果。 然后使用$ results数组中的值(例如打印它们):

foreach ($results as $key => $value) {
    print "$key => $value <br/>";
}

答案 2 :(得分:1)

使用您的ID构建逗号分隔列表并运行类似

的查询
SELECT id 
  FROM A 
  WHERE id IN (id1, id2, id3, ... idn) 
    AND probability = 1;

答案 3 :(得分:1)

您的第一个解决方案提案声明:

  1. 您将使用limit子句查询表A,因为A是一个包含大量数据的表。
  2. 您将把检索到的数据放在一个数组中。
  3. 您将遍历数组以查找概率为“1”的ID。
  4. 您将多次重复前三个步骤,直到表A完全迭代。
  5. 效率非常低!

    上述算法需要大量数据库访问和不必要的内存(对于临时数组)。相反,只需使用带有'WHERE'子句的select语句,并处理您想要的数据。

    我需要一个类似以下的查询:

    SELECT id, probably FROM A WHERE A.probably = 1
    

答案 4 :(得分:0)

如果我理解正确,你应该在SQL查询中过滤

  

SELECT * FROM A WHERE A.probably = 1