1

我的标题并没有完全正确地总结我需要什么,但希望当我解释我正在尝试做的事情时它会更清楚。我正在尝试创建一个基于 PHP 的网页,该网页采用输入的关键字并使用它将选择的数据输出到 Excel 电子表格。

我的第一个语句使用关键字来查找它所指的“itemid”在它自己的表中列出(键和 ID 的单独表并不理想,但我无法更改):

SELECT items.itemid
FROM items
LEFT JOIN hosts ON hosts.hostid = items.hostid
WHERE hosts.host LIKE 'keyword';

这将返回一组可以返回 0 个结果或 10+ 个结果的数字。现在我需要根据这些结果返回一组结果。

例如:

SELECT items.name, data.clock, data.value
FROM data
LEFT JOIN items ON data.itemid = items.itemid
WHERE item.itemid = '<First result from previous statement>'
GROUP BY data.value
ORDER BY items.name, data.clock ASC
LIMIT 15
UNION ALL
SELECT items.name, data.clock, data.value
FROM data
LEFT JOIN items ON data.itemid = items.itemid
WHERE item.itemid = '<Second result from previous statement>'
GROUP BY data.value
ORDER BY items.name, data.clock ASC
LIMIT 15
...
So on for however many results there were
...
    SELECT items.name, data.clock, data.value
FROM data
LEFT JOIN items ON data.itemid = items.itemid
INTO OUTFILE '/file/location.csv' FIELDS ..ect
WHERE item.itemid = '<x result from previous statement>'
GROUP BY data.value
ORDER BY items.name, data.clock ASC
LIMIT 15

我会使用 WHERE IN 而不是 UNION ALL,但我需要将其限制为每个值 15 个结果,因为有些结果最多可以有 100,000+ 行。

我在想可以将第一个语句的结果输​​入到一个数组中,然后将该数组用作第二个语句中的变量,但是每次我不确定如何编写时变量的数量都可能不同代码以这样的方式重复代码必要的次数并将 INTO OUTFILE 放在正确的位置。

我在用语言表达我需要的东西时遇到了一些麻烦,所以如果有任何不清楚的地方,请告诉我,我会尽快提供任何需要的信息。

感谢您提前提供任何帮助。

4

2 回答 2

1

如果您想使用多个查询来完成此操作,您可以使用 do while。我认为我们可以通过使用如下的单个查询来做到这一点。

SELECT items.name, data.clock, data.value
FROM data
LEFT JOIN items ON data.itemid = items.itemid
LEFT JOIN hosts ON hosts.hosstid = items.hostid
WHERE hosts.host LIKE 'keyword';
GROUP BY data.value
ORDER BY items.name, data.clock ASC
LIMIT 15;
于 2012-11-12T22:01:18.353 回答
0

最好的方法是从第一个查询中恢复信息,然后做一段时间:

$x=0;
while($row=$result->mysqli_fetch_array()){ //$result is the variable where you have the result of the 1st query execution
    //execute second query with $row[0], $row[1]... as variables, get the results in the variable $result2.
    //If you need groups of 15 elements do something like: 
    $y=$x*15;
    $query2="SELECT .... LIMIT $y, 15";
    $result2=$mysqli->query($query2);
    while($row2=$result2->mysqli_fetch_array()){
        //do something with the results of the 2nd query, stored in $row2[0], $row2[1], etc
    }
    $x++;
}
于 2012-11-12T16:24:32.113 回答