我有一个表A,只有两列:'id'和'might'。我需要查看一长串ID,并确定每个ID是否在A中并且概率为“1”。最好的方法是什么?
我认为最好在脚本开头有一个来自A的大查询,然后在我循环每个id时,我检查第一个查询。但比我意识到我不知道怎么做(有效)。我的意思是,无论如何将第一个查询的所有结果加载到一个数组而不是in_array()检查?我应该提一下,第一个查询应该没有结果,10以下(而表A可能非常大)。
另一个解决方案是在A中为每个id执行单独的查询,同时我循环它们。但这似乎不是很有效......
有什么想法吗?
答案 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)
您的第一个解决方案提案声明:
limit
子句查询表A,因为A是一个包含大量数据的表。效率非常低!
上述算法需要大量数据库访问和不必要的内存(对于临时数组)。相反,只需使用带有'WHERE'子句的select语句,并处理您想要的数据。
我需要一个类似以下的查询:
SELECT id, probably FROM A WHERE A.probably = 1
答案 4 :(得分:0)
如果我理解正确,你应该在SQL查询中过滤
SELECT * FROM A WHERE A.probably = 1