【发布时间】:2018-11-18 12:07:31
【问题描述】:
PHP 新手在这里。这是我从中提取数据的 MySQL 数据库中的表的示例。
id classA classB value
------------------------------
1 A A 1
2 A B 5
3 A C 2
4 B A 1
5 B B 5
6 B C 1
7 C A 8
8 C B 5
9 C C 7
用户输入一个类类别列表(A、B、C 等),我的代码将返回这些对的每个组合的值(例如 [A,A]、[A,B]、[A ,C]...等)。我可以使用以下脚本轻松实现这一点,其中$array 是输入列表(例如[A,B,C]):
<?php
// Mehtod 1 - slow
for($i = 0; $i < count($arr); $i++){
for ($j = 0; $j < count($arr); $j++){
$sql = "SELECT value FROM data_table WHERE '$arr[$i]'=classA AND '$arr[$j]'=classB LIMIT 1";
$value = mysqli_query($con,$sql);
$value = mysqli_fetch_array($corr)[0];
$results[] = array('classA' => $arr[$i], 'classB' => $arr[$j], 'value' => $value);
}
}
?>
但是,这很慢,因为 mysqli_query() 在 for 循环中。相反,我更愿意在一次调用中进行查询。我试过以下没有运气..
<?php
// Mehtod 2 - fast
for($i = 0; $i < count($arr); $i++){
for ($j = 0; $j < count($arr); $j++){
// make array of class combinations
$query_array[] = array('classA' => $arr[$i], 'classB' => $arr[$j]);
}
}
// get arrays of pairs to request
$match1 = array_column($query_array, 'classA');
$match2 = array_column($query_array, 'classB');
$sql = "SELECT classA, classB, value FROM data_table WHERE classA IN '$match1' AND classB IN '$match2'";
$results = mysqli_query($con,$sql);
$results = mysqli_fetch_array($results);
?>
我可以用一个请求进行这样的查询吗?我有点卡住了。干杯。
【问题讨论】: