获得与mysql格式相同的结果?

时间:2018-05-09 19:27:28

标签: php mysql

我有一个select我需要扫描一张桌子才能得到结果:

where (p.user in (select f from fl where user =? and block=0))

此表是一个包含超过100万行的大表。这需要一段时间才能阅读。我需要一直阅读它,所以我想我可以读一次然后使用:

where (p.user in ($variable_with_all_results))

我试过了:

$stmt = $mysqli->prepare("select f from f1 where user = '1' and block = 0");
$stmt->execute();
$stmt->bind_result($variable_with_all_results);

但我无法在select上使用此变量,mysql无法识别它。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你应该能够做到这样的事情:

$stmt = $mysqli->prepare("select GROUP_CONCAT(f) from f1 where user = '1' and block = 0");
$stmt->execute();
$stmt->bind_result($variable_with_all_results);
$stmt->fetch();

请注意,您需要在查询中的GROUP_CONCAT附近添加f聚合函数,这会为您提供类似1,5,6的列表。您还需要在语句上执行fetch以将结果输入变量。

然后你应该能够像这样建立一个新的查询:

$sql = "SELECT ...
        WHERE p.user in ($variable_with_all_results)";

答案 1 :(得分:0)

bind_result不会以这种方式工作,您应该使用bind_param()。 但是使用IN (?)不会。

你需要分别绑定每个id,有些人会这样想:

$stmt->bind_param("select f from f1 where (p.user in (select f from fl where user = IN (?,?,?,?,?) and block=0))", $id1, $id2,$id3, $id4, $id5);

这个答案https://stackoverflow.com/a/17228326/2271198可以更好地解释bind_param工作的人